& ldquo; Corrupt record & rdquo; при чтении многострочного JSON в Apache Spark [duplicate]

У Винса Хьюстона есть эти критерии, которые кажутся мне разумными:

Singleton следует рассматривать только в том случае, если удовлетворяются все три из следующих критериев:

  • Собственность одного экземпляра не может быть назначена надлежащим образом
  • Желательна инициализация в режиме ожидания
  • Глобальный доступ для
g6] Если принадлежность к одному экземпляру, когда и как происходит инициализация, а глобальный доступ не является проблемой, Singleton недостаточно интересен. blockquote>

15
задан mar tin 15 February 2016 в 13:34
поделиться

4 ответа

В вашем входном файле должен быть один json-объект для каждой строки, см. http://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.DataFrameReader .json

Если ваш json-файл выглядит так, он даст вам ожидаемый файл данных:

{ "a": 1, "b": 2 }
{ "a": 3, "b": 4 }

....
df.show()
+---+---+
|  a|  b|
+---+---+
|  1|  2|
|  3|  4|
+---+---+
29
ответ дан Bernhard 21 August 2018 в 09:17
поделиться
  • 1
    Как я могу исправить это, если мой JSON-файл огромен (пара 100K строк), и у него много новых строк между записями (столбцами или функциями)? Благодарю. – M.Rez 13 April 2017 в 13:17

Добавление к замечательному ответу @ Бернхарда

# original file was written with pretty-print inside a list
with open("pretty-printed.json") as jsonfile:
    js = json.load(jsonfile)      

# write a new file with one object per line
with open("flattened.json", 'a') as outfile:
    for d in js:
        json.dump(d, outfile)
        outfile.write('\n')
2
ответ дан George Fisher 21 August 2018 в 09:17
поделиться
  • 1
    Думаю, это может быть комментарий к ответу? – mar tin 21 May 2017 в 07:42

В Spark 2.2+ вы можете прочитать json-файл многострочного файла, используя следующую команду:

val dataframe = spark.read.option("multiline",true).json( " filePath ")

, если на строке есть json-объект, тогда

val dataframe = spark.read.json(filepath)
0
ответ дан Murtaza Zaveri 21 August 2018 в 09:17
поделиться

Если вы хотите оставить свой JSON-файл таким, каким он есть (без удаления новых символов строк \n), включите multiLine=True аргумент ключевого слова

sc = SparkContext() 
sqlc = SQLContext(sc)

df = sqlc.read.json('my_file.json', multiLine=True)

print df.show()
11
ответ дан Reblochon Masque 21 August 2018 в 09:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: