代码之家  ›  专栏  ›  技术社区  ›  sjishan

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

  •  5
  • sjishan  · 技术社区  · 7 年前

    我有一个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 回复  |  直到 4 年前
        1
  •  8
  •   Ramesh Maharjan    7 年前

    您可以使用 sparkContext wholeTextFiles api来读取 json文件 进入 Tuple2(filename, whole text) , 将整个文本解析为多行JSON ,然后最终使用 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|
    +------+------+
    

    但是,您可以根据需要修改代码