使用熊猫read_csv()
函数,我读取了一个iso-8859-1
文件,如下所示:
df = pd.read_csv('path/file',
sep = '|',names =['A','B'], encoding='iso-8859-1')
然后,我想使用MLLib的word2vect。但是,它只接受作为参数RDD。所以我尝试将熊猫数据帧转换为RDD,如下所示:
from pyspark.sql import SQLContext
spDF = sqlContext.createDataFrame(df['A'])
spDF.show()
无论如何,我得到了以下异常:
TypeError: Can not infer schema for type: <type 'unicode'>
我去了 Pyspark 的文档,看看是否有类似编码参数的东西,但我没有找到任何东西。关于如何将特定的熊猫数据帧列转换为 Pyspark RDD 的任何想法?
更新:
从@zeros答案中,这就是我尝试将列另存为数据帧的方法,如下所示:
new_dataframe = df_3.loc[:,'A']
new_dataframe.head()
然后:
from pyspark.sql import SQLContext
spDF = sqlContext.createDataFrame(new_dataframe)
spDF.show()
我得到了同样的例外:
TypeError: Can not infer schema for type: <type 'unicode'>
当你使用时,df['A']
不是一个pandas.DataFrame
而是pandas.Series
因此当你把它传递给SqlContext.createDataFrame
时,它被视为任何其他Iterable
,PySpark不支持将简单类型转换为DataFrame
。
如果要将数据保留为 Pandas DataFrame
请使用loc
方法:
df.loc[:,'A']
从@zeros323回答中,我注意到它实际上不是熊猫数据帧。我查阅了 pandas 文档,发现to_frame()
可以在 pandas 数据帧中转换该特定列。所以我做了以下工作:
new_dataframe = df['A'].to_frame()
new_dataframe.head()
from pyspark.sql import SQLContext
spDF = sqlContext.createDataFrame(new_dataframe)
spDF.show()