Concat определенные поля строки String после разделения - PullRequest
0 голосов
/ 01 июня 2018

У меня есть файл в формате Json, который содержит сотни твитов (у всех 5 полей):

[...]

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

[...]

Я конвертирую содержимое файла в RDD для работы с ним

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

И я разбиваю каждую строковую строку:

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

Даем результат (схема) [ej.1]:

field(0):  {"idTweet":"943959778006589441"
field(1):  "text":"Lorem ipsum dolor sit amet..."
field(2):  "idAuthor":"912276331584421889"
field(3):  "idOriginal":"0"
field(4):  "origAuthor":"0"}

Все в порядке, если в строке твита есть ошибки, подобные приведенным ниже в текстах:

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

Если я слякоть, как и раньше, она делится следующим образом:

field(0):  {"idTweet":"943959778006589441"
field(1):  "text":"Lorem ipsum"
field(2):  "dolor sit"
field(3):  "amet"
field(4):  "..."}

Как можно объединить определенные поля, чтобы объединить их в одно (текст поля) после разбиения строки?Нравится [ej.1] результат.

1 Ответ

0 голосов
/ 02 июня 2018

Вы сказали, что формат был "Json-like", что означает, что он не является действительным JSON .Следующее объявление:

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

равно не допустимо JSON , и поэтому, если вы используете парсер JSON , это приведет к ошибкесоответственно и может быть обработан, как вы захотите.

Если формат JSON -esque, но на самом деле не JSON , это поражает меня как случай, когда вынеобходимо настроить формат по пути и обработать его соответствующим образом.

В случае вышеупомянутого сообщения, он должен быть определен как недопустимый в вашем формате и вместо этого помечен как недопустимый в качестве вашегос помощью задания Spark , переходящего к следующей записи в RDD.

...