我在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'
有什么想法吗?
答案 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")