【问题标题】:Azure Data-bricks : How to read part files and save it as one file to blob?Azure Data-bricks:如何读取部分文件并将其作为一个文件保存到 blob?
【发布时间】:2020-03-16 18:50:07
【问题描述】:

我正在使用 Python spark 将数据帧写入 blob 中的文件夹,该文件夹将保存为部分文件:

df.write.format("json").save("/mnt/path/DataModel")

文件保存为:

我正在使用以下代码将其合并到一个文件中:

#Read Part files
 path = glob.glob("/dbfs/mnt/path/DataModel/part-000*.json")  

#Move file to FinalData folder in blbo
    for file in path: 
          shutil.move(file,"/dbfs/mnt/path/FinalData/FinalData.json")

但是FinalData.Json只有最后一部分文件数据,没有全部数据 部分文件。

【问题讨论】:

    标签: python azure apache-spark databricks azure-databricks


    【解决方案1】:

    我看到你想简单地将这些文件的内容合并到一个文件中,但是由于下图shutil.move函数的描述,它的特性就像Linux mv,所以最后的内容文件将覆盖之前文件的内容。

    而代码写入多个文件的原因是Spark在HDFS上工作,所以在HDFS上写入超过128MB(HDFS部分文件大小)的数据会生成多个以part前缀命名的文件,请参考@ 987654322@.

    满足您需求的解决方案是将 PySpark 数据帧转换为 Pandas 数据帧,然后使用 pandas 数据帧函数 to_json 编写 json 文件。

    这是我的示例代码。

    df.toPandas().to_json('/dbfs/mnt/path/FinalData/FinalData.json')
    

    然后检查文件是否存在。

    import os
    os.path.isfile('/dbfs/mnt/path/FinalData/FinalData.json')
    

    或者

    dbutils.fs.ls('dbfs:/mnt/path/')
    

    作为参考,下图是我的结果。

    对于您的其他问题,使用 PySpark 读取零件文件是将通配符路径传递给函数spark.read.json(),如下代码所示。

    spark.read.json('dbfs:/mnt/path/DataModel/part-*.json')
    

    【讨论】:

    • 我尝试过使用 to-pandas,正在创建文件但 json 格式不正确
    • 为什么然后检查文件是否存在。需要吗?
    • @SagarK 不检查文件是否存在,我只是想告诉你文件已经创建。
    • @SagarK 你应该向我展示相同的样本数据。让我知道您的数据框和 json 的结构是什么,以及您想要正确的 json 格式是什么。
    猜你喜欢
    • 2020-02-28
    • 2016-08-09
    • 2021-07-03
    • 1970-01-01
    • 2019-09-09
    • 2018-04-26
    • 2020-08-25
    • 2021-01-31
    • 1970-01-01
    相关资源
    最近更新 更多