将 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:将稀疏局部矩阵转换为 RDD

使用 pyspark 将 Spark 数据框中的列转换为数组 [重复]

如何使用pyspark将具有多个可能值的Json数组列表转换为数据框中的列

尝试使用 JSON 结构将时间箱转换为 Pyspark 中的分钟和小时数组

Pyspark 将 json 数组转换为数据帧行

将 Pandas Dataframe 中的选择列转换为 Numpy 数组