将pandas数据帧转换为PySpark RDD时出现问题?

时间:2016-03-17 21:30:27

标签: python python-2.7 pandas pyspark pyspark-sql

使用pandas read_csv()函数,我按如下方式读取iso-8859-1文件:

df = pd.read_csv('path/file', \
                   sep = '|',names =['A','B'], encoding='iso-8859-1')

然后,我想使用MLLib的word2vect。但是,它只接受RDDs作为参数。所以我尝试将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回答这是我尝试将columnn保存为数据帧,如下所示:

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

2 个答案:

答案 0 :(得分:2)

使用时df['A']不是pandas.DataFrame而是pandas.Series因此当您将其传递给SqlContext.createDataFrame时,它会被视为任何其他Iterable而PySpark不会#39;支持将简单类型转换为DataFrame

如果您想将数据保留为Pandas DataFrame,请使用loc方法:

df.loc[:,'A']

答案 1 :(得分:0)

从@ zeros323回答我注意到它实际上不是熊猫数据帧。我consulted pandas documentation发现function lgbk_add_member( $order_id ) { $order = new WC_Order( $order_id ); $items = $order->get_items(); foreach ( $items as $item ) { $product_name = $item['name']; $product_id = $item['product_id']; $product_variation_id = $item['variation_id']; if ( $order->user_id > 0 && $product_id == '7' ) { update_user_meta( $order->user_id, 'paying_customer', 1 ); $user = new WP_User( $order->user_id ); // Remove role $user->remove_role( 'expired' ); // Add role $user->add_role( 'customer' ); } } } add_action( 'woocommerce_order_status_completed', 'lgbk_add_member' ); 可以转换pandas数据帧中的特定列。所以我做了以下事情:

to_frame()