将 pandas 数据帧转换为 PySpark RDD 时出现问题?
Problems while transforming pandas dataframe to PySpark RDD?
使用 pandas read_csv()
函数我读取了一个 iso-8859-1
文件如下:
df = pd.read_csv('path/file', \
sep = '|',names =['A','B'], encoding='iso-8859-1')
那我想用MLLib的word2vect。但是,它只接受 RDD 作为参数。所以我尝试将 pandas 数据帧转换为 RDD,如下所示:
from pyspark.sql import SQLContext
spDF = sqlContext.createDataFrame(df['A'])
spDF.show()
无论如何,我遇到了以下异常:
TypeError: Can not infer schema for type: <type 'unicode'>
我去Pyspark's documentation看有没有编码参数之类的东西,但是没找到。知道如何将特定的 pandas 数据框列转换为 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 数据框。我 consulted pandas documentation 发现 to_frame()
可以转换 pandas 数据框中的特定列。所以我做了以下事情:
new_dataframe = df['A'].to_frame()
new_dataframe.head()
from pyspark.sql import SQLContext
spDF = sqlContext.createDataFrame(new_dataframe)
spDF.show()
使用 pandas read_csv()
函数我读取了一个 iso-8859-1
文件如下:
df = pd.read_csv('path/file', \
sep = '|',names =['A','B'], encoding='iso-8859-1')
那我想用MLLib的word2vect。但是,它只接受 RDD 作为参数。所以我尝试将 pandas 数据帧转换为 RDD,如下所示:
from pyspark.sql import SQLContext
spDF = sqlContext.createDataFrame(df['A'])
spDF.show()
无论如何,我遇到了以下异常:
TypeError: Can not infer schema for type: <type 'unicode'>
我去Pyspark's documentation看有没有编码参数之类的东西,但是没找到。知道如何将特定的 pandas 数据框列转换为 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 数据框。我 consulted pandas documentation 发现 to_frame()
可以转换 pandas 数据框中的特定列。所以我做了以下事情:
new_dataframe = df['A'].to_frame()
new_dataframe.head()
from pyspark.sql import SQLContext
spDF = sqlContext.createDataFrame(new_dataframe)
spDF.show()