将numpy数组转换为pyspark中的DataFrame以导出为csv

时间:2018-11-29 11:06:01

标签: arrays numpy dataframe pyspark

我在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'

有什么想法吗?

2 个答案:

答案 0 :(得分: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')

答案 1 :(得分:1)

首先,我需要按如下方式将numpy数组转换为rdd;

zrdd = spark.sparkContext.parallelize([zarr])

然后使用以下代码(我们现在还定义列标题)将其转换为DataFrame;

df = zrdd.map(lambda x: x.tolist()).toDF(["SOR"])

然后我可以像平常一样写出来;

df.write.csv("/hdfs/mylocation")