将 numpy 数组转换为 pyspark 中的 DataFrame 以导出为 csv
Posted
技术标签:
【中文标题】将 numpy 数组转换为 pyspark 中的 DataFrame 以导出为 csv【英文标题】:Convert a numpy array to a DataFrame in pyspark to export as csv 【发布时间】:2019-05-01 10:22:58 【问题描述】:我在 pyspark 中有一个 numpy 数组,我想将其转换为 DataFrame,以便我可以将其写为 csv 以查看它。
我最初从 DataFrame 中读取数据,但是我必须转换为数组才能使用 numpy.random.normal()
。现在我想把数据转换回来,这样我就可以把它写成 csv 来查看它。
我已经在数组上直接尝试了以下
zarr.write.csv("/mylocation/inHDFS")
但是我得到以下错误
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'numpy.ndarray' object has no attribute 'write'
有什么想法吗?
【问题讨论】:
【参考方案1】:Numpy 数组和 Spark Dataframe 是完全不同的结构。第一个是本地的,没有列名,第二个是分布式的(或本地模式下的分布式就绪),并且具有强类型的列。
我建议首先将 numpy 数组转换为 Pandas DF,如下所述:Creating a Pandas DataFrame from a Numpy array: How do I specify the index column and column headers?,然后将其转换为 spark 使用:
df = spark.createDataFrame(pandas_df)
df.write.csv('/hdfs/path')
【讨论】:
谢谢,但是我没有熊猫,因为我正在使用 pyspark【参考方案2】:首先我需要将 numpy 数组转换为 rdd,如下所示;
zrdd = spark.sparkContext.parallelize([zarr])
然后使用以下代码将其转换为 DataFrame(我们现在还定义了列标题);
df = zrdd.map(lambda x: x.tolist()).toDF(["SOR"])
然后我可以像这样照常写出来;
df.write.csv("/hdfs/mylocation")
【讨论】:
以上是关于将 numpy 数组转换为 pyspark 中的 DataFrame 以导出为 csv的主要内容,如果未能解决你的问题,请参考以下文章
使用 pyspark 将 Spark 数据框中的列转换为数组 [重复]
如何使用pyspark将具有多个可能值的Json数组列表转换为数据框中的列