Apache spark 为pyspark RDD生成单个json文件
我正在构建一个Python脚本,其中需要从json RDD生成一个json文件。 下面是保存json文件的代码片段Apache spark 为pyspark RDD生成单个json文件,apache-spark,pyspark,rdd,Apache Spark,Pyspark,Rdd,我正在构建一个Python脚本,其中需要从json RDD生成一个json文件。 下面是保存json文件的代码片段 jsonRDD.map(lambda x :json.loads(x)) .coalesce(1, shuffle=True).saveAsTextFile('examples/src/main/resources/demo.json') 但我需要将json数据写入单个文件,而不是跨多个分区分布的数据 因此,请为我提供适当的解决方案一旦我将JSON文件保存在RDD或数据帧中,我就
jsonRDD.map(lambda x :json.loads(x))
.coalesce(1, shuffle=True).saveAsTextFile('examples/src/main/resources/demo.json')
但我需要将json数据写入单个文件,而不是跨多个分区分布的数据
因此,请为我提供适当的解决方案一旦我将JSON文件保存在RDD或数据帧中,我就遇到了pyspark保存JSON文件的问题,所以我要做的是将它们转换为pandas数据帧并保存到非分布式目录
import pandas
df1 = sqlContext.createDataFrame(yourRDD)
df2 = df1.toPandas()
df2.to_json(yourpath)
如果不使用pandas之类的附加库,您可以将多个JSON的RDD缩减为一大串JSON,每个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"))
感谢您的回答,但是脚本生成了一个异常“ImportError:没有名为pandas的模块”。在通过ApacheSparkyou执行时,您需要在集群中的所有节点上安装pandas,因为看起来您要从分布式数据集转换为存储在本地文件系统中一台服务器上的文件。假设您使用的是linux,您应该能够使用“sudo apt get install python pandas”从终端安装它,但是您应该能够通过谷歌搜索特定的服务器安装,因为安装其他python库是一件非常标准的事情。