使用pyspark

时间:2017-04-22 19:48:05

标签: json pyspark spark-streaming spark-dataframe pyspark-sql

我正在使用python spark sql来读取从Kinesis发送的流文件。嵌套的Json流将保存并压缩到S3存储桶中。这些gzip文件不是标准的json格式,只是有一堆json对象没有逗号分隔。它在文件的开头和结尾都没有[]。这是示例,示例中有2个json对象,我希望每个对象可以是输出中的一行:

{
    "id": "0001",
    "type": "donut",
    "name": "Cake",
    "ppu": 0.55,
    "batters":
        {
            "batter":
                [
                    { "id": "1001", "type": "Regular" },
                    { "id": "1002", "type": "Chocolate" },
                    { "id": "1003", "type": "Blueberry" },
                    { "id": "1004", "type": "Devil's Food" }
                ]
        }
}
{
    "id": "0002",
    "type": "donut",
    "name": "Cake",
    "ppu": 0.65,
    "batters":
        {
            "batter":
                [
                    { "id": "1221", "type": "Regular" },
                    { "id": "1223", "type": "Chocolate" },
                    { "id": "1225", "type": "Blueberry" },
                    { "id": "1228", "type": "Devil's Food" }
                ]
        }
}

我可以使用pyspark sqlContext.read.json('streaming.json')来读取此文件,但该函数只返回第一个对象。当我将[]和逗号分隔添加到那些json对象时,它会成功读取这两个对象。但在我的情况下,我每天有1 TB的文件,很难将流式传输转换为标准的json文件。我是新来的火花,有没有办法使用spark或sparkSQL读取那些流式json对象?我期望的输出是json flatten csv或dataframe保存回S3。非常感谢。

0 个答案:

没有答案