У Винса Хьюстона есть эти критерии, которые кажутся мне разумными:
Singleton следует рассматривать только в том случае, если удовлетворяются все три из следующих критериев:
g6] Если принадлежность к одному экземпляру, когда и как происходит инициализация, а глобальный доступ не является проблемой, Singleton недостаточно интересен. blockquote>
- Собственность одного экземпляра не может быть назначена надлежащим образом
- Желательна инициализация в режиме ожидания
- Глобальный доступ для
В вашем входном файле должен быть один 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|
+---+---+
Добавление к замечательному ответу @ Бернхарда
# 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')
В Spark 2.2+ вы можете прочитать json-файл многострочного файла, используя следующую команду:
val dataframe = spark.read.option("multiline",true).json( " filePath ")
, если на строке есть json-объект, тогда
val dataframe = spark.read.json(filepath)
Если вы хотите оставить свой JSON-файл таким, каким он есть (без удаления новых символов строк \n
), включите multiLine=True
аргумент ключевого слова
sc = SparkContext()
sqlc = SQLContext(sc)
df = sqlc.read.json('my_file.json', multiLine=True)
print df.show()