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

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

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

{
  "key1" : "value1",
  "key2" : "value2"
}{
  "key1" : "value1",
  "key2" : "value2"
}
在 Apache Spark 中,我这样做是为了读取数据文件,
df = spark.read.schema(schema).json(path, multiLine=True)
这只能读取文件中的第一个 json 对象,其余的将被忽略,因为没有分隔符。
如何在 spark 中使用解决此问题?

最佳答案

您可以使用 sparkContextwholeTextFiles api 将 json 文件读入 Tuple2(filename, whole text) ,将整个文本解析为multiLine jsons,然后最后使用sqlContext将其作为 json 读取到数据帧。

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|
+------+------+

您可以根据需要修改代码

关于json - Pyspark:读取对象之间没有分隔符的 JSON 数据文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48218457/

相关文章:

javascript - Json 对象 AngularJS

javascript - 如何查询 Firebase 的 equalTo bool 参数?

java - 使用 Gson 进行 JSON 反序列化

python - 混淆矩阵缺失实例

apache-spark - ALS 是确定性的吗?

apache-spark - AWS EMR 多作业依赖争用

javascript - 将 json 结果添加到表单操作 url

apache-spark - 将数据框保存为外部配置单元表

apache-spark - 使用 PySpark 分解数组值

apache-spark - 删除rdd中的空行