如何将多个dataframe列转换为一个numpy数组列

如何将多个dataframe列转换为一个numpy数组列,numpy,pyspark,pyspark-dataframes,Numpy,Pyspark,Pyspark Dataframes,我有一个如下所示的数据帧 from pyspark import SparkContext, SparkConf,SQLContext import numpy as np config = SparkConf("local") sc = SparkContext(conf=config) sqlContext=SQLContext(sc) df = sqlContext.createDataFrame([("doc_3",1,3,9), ("doc_1",9,6,0), ("doc_2",9

我有一个如下所示的数据帧

from pyspark import SparkContext, SparkConf,SQLContext
import numpy as np

config = SparkConf("local")
sc = SparkContext(conf=config)
sqlContext=SQLContext(sc)
df = sqlContext.createDataFrame([("doc_3",1,3,9), ("doc_1",9,6,0), ("doc_2",9,9,3) ]).withColumnRenamed("_1","doc").withColumnRenamed("_2","word1").withColumnRenamed("_3","word2").withColumnRenamed("_4","word3")
现在,我需要将第一列和其余列保持为numpy数组(两列:“doc”和一个numpy数组列)

我知道

sdf=np.array(df.select([c for c in df.columns if c not in {'doc'}]).collect())
print sdf

将所有列转换为numpy数组,但如何将numpy数组附加到第一列?非常感谢您的帮助。

不幸的是,您无法在pyspark dataframe中生成
numpy.array
列,但您可以使用常规的
python
列表,并在阅读时转换它:

>>df=sqlContext.createDataFrame([(“doc_3”、[1,3,9])、(“doc_1”、[9,6,0])、(“doc_2”、[9,9,3]))。使用列重命名(“\u 1”,“doc”)。使用列重命名(“\u 2”,“words”)
>>>df.show()
+-----+---------+
|博士|字|
+-----+---------+
|文件3[1,3,9]|
|文件1[9,6,0]|
|博士2 |[9,9,3]|
+-----+---------+
>>>df
数据帧[doc:string,words:array]
要从您拥有的4列中获取此信息,您可以:

>>从pyspark.sql.functions导入*
>>>df2=df.select(“doc”,数组(“word1”、“word2”、“word3”)。别名(“words”))
>>>df2
数据帧[doc:string,words:array]
>>>df2.show()
+-----+---------+
|博士|字|
+-----+---------+
|文件3[1,3,9]|
|文件1[9,6,0]|
|博士2 |[9,9,3]|
+-----+---------+