从spark scala中的序列文件中提取json记录

时间:2016-10-21 10:27:47

标签: json scala hadoop apache-spark

我有一个包含多个json记录的序列文件。我想将每个json记录发送到一个函数。如何一次提取一条json记录?

2 个答案:

答案 0 :(得分:0)

不幸的是,没有标准的方法可以做到这一点。

YAML不同,suggested有一个明确定义的方法允许一个文件包含多个YAML"文档",JSON没有这样的标准。

解决问题的一种方法是创建自己的"对象分隔符"。例如,您可以使用换行符分隔相邻的JSON对象。您可以告诉您的JSON编码器不要输出任何换行符(通过强制将其转义为\n)。只要您的JSON解码器确定它不会看到任何换行符,除非它将两个JSON对象分开,它可以一次读取一行并解码每一行。

你也可以使用JSON数组存储多个JSON对象regex demo,但它不再是"流"。

答案 1 :(得分:0)

您可以将序列文件的内容读取到RDD [String]并将其转换为Spark Dataframe。

val seqFileContent = sc
  .sequenceFile[LongWritable, BytesWritable](inputFilename)
  .map(x => new String(x._2.getBytes))
val dataframeFromJson = sqlContext.read.json(seqFileContent)