Pyspark:读取JSON数据文件,对象之间没有分隔符

时间:2018-01-12 01:50:21

标签: json apache-spark pyspark databricks amazon-kinesis-firehose

我有一个kinesis firehose传输流,可以将数据输入S3。但是在数据文件中,json对象之间没有分隔符。所以它看起来像这样,

{
  "key1" : "value1",
  "key2" : "value2"
}{
  "key1" : "value1",
  "key2" : "value2"
}

在Apache Spark中,我这样做是为了读取数据文件,

df = spark.read.schema(schema).json(path, multiLine=True)

这只能读取文件中的第一个json对象而其余的被忽略,因为没有分隔符。

如何在spark中解决此问题?

1 个答案:

答案 0 :(得分:2)

您可以使用sparkContext' wholeTextFiles api将 json文件读入Tuple2(filename, whole text)将整个文本解析为multiLine jsons ,然后最后使用sqlContext将其作为 json读取到dataframe

sqlContext\
    .read\
    .json(sc
          .wholeTextFiles("path to your multiline json file")
          .values()
          .flatMap(lambda x: x
                   .replace("\n", "#!#")
                   .replace("{#!# ", "{")
                   .replace("#!#}", "}")
                   .replace(",#!#", ",")
                   .split("#!#")))\
    .show()

你应该dataframe作为

+------+------+
|  key1|  key2|
+------+------+
|value1|value2|
|value1|value2|
+------+------+

您可以根据需要修改代码