У меня есть файл последовательности, содержащий несколько записей json. Я хочу отправить каждую запись json в функцию. Как я могу извлечь одну запись json за раз?Извлечение записей json из файлов последовательности в spark scala
ответ
К сожалению, для этого нет стандартного способа.
В отличие от YAML, который имеет четко определенный способ разрешить одному файлу содержать несколько документов YAML, JSON не имеет таких стандартов.
Один из способов решения вашей проблемы - придумать свой «разделитель объектов». Например, вы можете использовать символы новой строки для разделения соседних объектов JSON. Вы можете указать вашему кодеру JSON не выводить символы новой строки (вытесняя его в \
и n
). Пока ваш JSON-декодер уверен, что он не увидит символ новой строки, если он не разделяет два объекта JSON, он может считывать поток по одной строке за раз и декодировать каждую строку.
Это также было suggested, что вы можете использовать массивы JSON для хранения нескольких объектов JSON, но это больше не будет «потоком».
Вы можете прочитать содержимое ваших файлов последовательности в RDD [String] и преобразовать его в Spark Dataframe.
val seqFileContent = sc
.sequenceFile[LongWritable, BytesWritable](inputFilename)
.map(x => new String(x._2.getBytes))
val dataframeFromJson = sqlContext.read.json(seqFileContent)