我正试着把PandasDF转换成Spark一号
10000001,1,0,1,12:35,OK,10002,1,0,9,f,NA,24,24,0,3,9,0,0,1,1,0,0,4,543
10000001,2,0,1,12:36,OK,10002,1,0,9,f,NA,24,24,0,3,9,2,1,1,3,1,3,2,611
10000002,1,0,4,12:19,PA,10003,1,1,7,f,NA,74,74,0,2,15,2,0,2,3,1,2,2,691
代码:
dataset = pd.read_csv("data/AS/test_v2.csv")
sc = SparkContext(conf=conf)
sqlCtx = SQLContext(sc)
sdf = sqlCtx.createDataFrame(dataset)
我得到一个错误:
TypeError: Can not merge type <class 'pyspark.sql.types.StringType'> and <class 'pyspark.sql.types.DoubleType'>
7条答案
按热度按时间pqwbnv8z1#
我做了这个脚本,它适用于我的10只Pandas
在gist中也可以看到
使用此函数,只需调用
spark_df = pandas_to_spark(pandas_df)
lp0sw83n2#
你需要确保你的panda Dataframe 列适合spark正在推断的类型。如果你的panda Dataframe 列出了如下内容:
你得到的错误尝试:
现在,确保
.astype(str)
是你想要的列类型,基本上,当底层Java代码试图从python中的一个对象推断类型时,它会使用一些观察结果并做出猜测,如果这个猜测不适用于列中的所有数据,它将尝试从panda转换为spark,它将失败。k10s72fa3#
类型相关的错误可以通过强制模式来避免,如下所示:
Pandas数据框架的内容:
接下来,创建架构:
True
(暗示允许为空)创建pyspark Dataframe :
确认Pandas Dataframe 现在是pyspark Dataframe :
输出:
要解决Kate下面的评论--要强加一个通用(字符串)模式,您可以执行以下操作:
bcs8qyzn4#
在spark版本〉= 3中,您可以在一行中将panda Dataframe 转换为pyspark Dataframe
创建 Dataframe (pandasDF)
如果您对Spark会话变量感到困惑,Spark会话如下所示
gdrx4gfi5#
我已经尝试了这个与您的数据和它的工作:
cigdeys36#
我稍微整理/简化了上面的答案:
qhhrdooz7#
我收到过一次类似的错误信息,在我的情况下,这是因为我的Pandas Dataframe 包含空。我会建议尝试&处理这个Pandas之前,转换到Spark(这解决了我的情况下的问题)。