【问题标题】:Generate single json file for pyspark RDD为 pyspark RDD 生成单个 json 文件
【发布时间】:2015-09-02 14:32:26
【问题描述】:

我正在构建一个 Python 脚本,我需要在其中从 json RDD 生成一个 json 文件。 以下是保存json文件的代码sn-p。

jsonRDD.map(lambda x :json.loads(x))
.coalesce(1, shuffle=True).saveAsTextFile('examples/src/main/resources/demo.json')

但我需要将 json 数据写入单个文件,而不是将数据分布在多个分区中。

所以请给我建议合适的解决方案

【问题讨论】:

    标签: apache-spark pyspark rdd


    【解决方案1】:

    不使用 pandas 等其他库,您可以通过将多个 json 缩减为一大串 json 来节省 RDD,每个 json 由一个新行分隔:

    # perform your operation
    # note that you do not need a lambda expression for json.loads
    jsonRDD = jsonRDD.map(json.loads).coalesce(1, shuffle=True)
    
    # map jsons back to string
    jsonRDD = jsonRDD.map(json.dumps)
    
    # reduce to one big string with one json on each line
    json_string = jsonRDD.reduce(lambda x, y: x + "\n" + y)
    
    # write your string to a file
    with open("path/to/your.json", "w") as f:
        f.write(json_string.encode("utf-8"))
    

    【讨论】:

      【解决方案2】:

      一旦我将 JSON 文件保存在 RDD 或数据框中,pyspark 会遇到问题,因此我要做的是将它们转换为 pandas 数据框并将它们保存到非分布式目录中。

      import pandas
      
      df1 = sqlContext.createDataFrame(yourRDD)
      df2 = df1.toPandas()
      df2.to_json(yourpath)
      

      【讨论】:

      • 感谢您的回答,但脚本生成了异常“ImportError: No module named pandas”。通过 Apache spark 执行时
      • 您需要在集群中的所有节点上安装 pandas,因为看起来您正在从分布式数据集转到存储在本地文件系统中的一台服务器上的文件。假设您使用的是 linux,您应该能够使用“sudo apt-get install python-pandas”从终端安装它,但是您应该能够通过谷歌搜索您的特定服务器安装,因为安装额外的 python 库是一件非常标准的事情.
      猜你喜欢
      • 2017-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-26
      相关资源
      最近更新 更多