分割后Concat的某些字段串行

时间:2018-06-01 20:34:13

标签: json scala apache-spark split concat

我有一个类似Json格式的文件,其中包含数百条推文(全部有5个字段):

x <- 1
x
# [1] 1
class(x) <- "Date"
x
# [1] "1970-01-02"

我将文件的内容转换为RDD以使用它

[...]

{
  "idTweet":"943959778006589441",
  "text":"Lorem ipsum dolor sit amet...",
  "idAuthor":"912276331584421889",
  "idOriginal":"0",
  "origAuthor":"0"
}

[...]

我拆分每个String行:

val testRDD = spark.sparkContext.textFile("json-like_file.txt")

给出结果(方案)[ej。 1]:

val tweets = testRDD.map(t => t.split("\",\""))
  .map(fields => (fields(0), fields(1), fields(2), fields(3), fields(4)))

只要推文行包含如下文字中的错误:

,这一切都很好
field(0):  {"idTweet":"943959778006589441"
field(1):  "text":"Lorem ipsum dolor sit amet..."
field(2):  "idAuthor":"912276331584421889"
field(3):  "idOriginal":"0"
field(4):  "origAuthor":"0"}

如果我像以前一样slpit,它会以这种方式划分它:

{
  "idTweet":"943959778006589441",
  "text":"Lorem ipsum","dolor sit","amet","...",
  "idAuthor":"912276331584421889",
  "idOriginal":"0",
  "origAuthor":"0"
}

在分割字符串后,如何连接某些字段以将它们连接成一个(字段文本)?像[ej。 1]结果。

1 个答案:

答案 0 :(得分:0)

你说格式是“Json-like”,这意味着它不是真正的 JSON 。以下简介:

{
  "idTweet":"943959778006589441",
  "text":"Lorem ipsum","dolor sit","amet","...",
  "idAuthor":"912276331584421889",
  "idOriginal":"0",
  "origAuthor":"0"
}

有效 JSON ,因此如果您使用 JSON 解析器,它会相应地出错并可以作为你这么选择。

如果格式是 JSON -esque,但实际上不是 JSON ,那么这就是我需要在路上自定义验证格式的情况,并据此处理。

如果出现上述问题,则应确定格式无效,并以您选择的方式标记为无效, Spark 作业将继续执行下一条记录RDD