apache-spark - 拆分 .ttl 或 .nt 文件 - Spark Scala
问题描述
我是 scala 的新手,我需要逐行读取 ttl 文件并在特定分隔符上拆分并提取值以放入数据框中的相应列中。
< http://website/Jimmy_Carter> <http://web/name> "James Earl Carter, Jr."@ko .
< http://website/Jimmy_Car> <http://web/country> <http://website/United_States> .
< http://website/Jimmy_Car> <http://web/birthPlace> <http://web/Georgia_(US)> .
我想要这个输出
+-------------------------------+---------------------------+-----------------------------
|S |P |O |
+-------------------------------+---------------------------+-----------------------------
|http://website/Jimmy_Car |http://web/name |"James Earl Carter |
|http:///website/Jimmy_Car |http://web/country |http://web/country |
|http://website/Jimmy_Car |http://web/birthPlace |http://web/Georgia_(US) |
|
我试过这段代码
case class T(S: Option[String], P: Option[String],O:Option[String])
val triples = sc.textFile("triples_test.ttl").map(_.split(" |\\< |\\> |\\ . ")).map(p =>
T(Try(p(0).toString()).toOption,Try(p(1).toString()).toOption,Try(p(2).toString()).toOption)).toDF()
我得到了这个结果
+-------------------------------+---------------------------+-----------------------------
|S |P |O |
+-------------------------------+---------------------------+-----------------------------
|<http://website/Jimmy_Car |<http://web/name |"James |
|<http:///website/Jimmy_Car |<http://web/country |<http://web/country |
|<http://website/Jimmy_Car |<http://web/birthPlace |<http://web/Georgia_(US)
为了删除每个三元组开头的分隔符“<”,我在拆分中添加了“|<”
val triples = sc.textFile("triples_test.ttl").map(_.split(" |\\< |\\> |\\ . |<")).map(p =>
T(Try(p(0).toString()).toOption,Try(p(1).toString()).toOption,Try(p(2).toString()).toOption)).toDF()
我得到了这个结果
+-------------------------------+---------------------------+-----------------------------
|S |P |O |
+-------------------------------+---------------------------+-----------------------------
| |http://web/name | |
| |http://web/country | |
| |http://web/birthPlace |
我怎么解决这个问题
解决方案
你不能像这样读取 Turtle 文件。另外,正则表达式是阅读 N-Triples 的一种非常幼稚的方式。不要重新发明轮子并使用https://github.com/banana-rdf/banana-rdf
推荐阅读
- python - 如何在 python 中访问 os.remove()?
- gulp - Vagrant up 脚本报告 gulp command not found 但 ssh in 并且运行没有问题
- node.js - 从前端发出请求时,后端 API 接收空请求正文
- c# - 在c#winforms中从数据库加载数据后如何更改dev express网格中的行颜色
- postgresql - 如何从 Google Cloud SQL 管理的 Postgres 中删除未使用的临时文件?
- json - 为什么会出现此错误“详细信息:“我们在 JSON 输入末尾发现多余的字符。”当我尝试在 power bi 中加载 JSON 文件时
- android - Firebase 存储:加密视频文件?
- sql-server - 我需要该命令,它将完全充当 sql server 中的 Translate 命令
- ios - 如何从 Firebase Firestore 获取时间戳日期?
- javascript - 在 Javascript 中创建字符串搜索功能 - React Native