【问题标题】:convert pandas dataframe with None;s in it to spark dataframe将带有 None;s 的 pandas 数据帧转换为 spark 数据帧
【发布时间】:2021-04-19 10:53:14
【问题描述】:

如何将包含少量 None 的 pandas 数据帧转换为 pyspark 数据帧?

熊猫数据框 -pandas_df :

0    30832
1      859
2     None
3    11982
4     None
5    18218
6    21232
7    26804
8    25144
9    15921 

创建如下模式 - mySchema:

StructField("column_count", LongType(), True)

应用架构:

spark.createDataFrame(pandas_df, mySchema)

错误:TypeError:字段 term_ins_year_cnt:LongType 不能接受

类型中的对象 30832.0

【问题讨论】:

    标签: pandas apache-spark pyspark apache-spark-sql


    【解决方案1】:

    您可以使用浮点类型的列来转换,并在 Spark 中转换为长类型:

    import pyspark.sql.functions as F
    from pyspark.sql.types import StructType, StructField, FloatType
    import pandas as pd
    
    pandas_df = pd.DataFrame([11,22,33,33,None], columns = ['col'])
    
    mySchema = StructType([StructField("column_count", FloatType(), True)])
    df = spark.createDataFrame(pandas_df, mySchema) \
         .replace(float('nan'), None) \
         .withColumn("column_count", F.col("column_count").cast("long"))
    
    df.show()
    +------------+
    |column_count|
    +------------+
    |          11|
    |          22|
    |          33|
    |          33|
    |        null|
    +------------+
    

    【讨论】:

    • 感谢您的快速回答。这会处理“无”吗?
    • 如果 df 中没有“None”,它工作正常。
    • 是的,它应该照顾无。我猜pandas没有可以为空的整数类型,所以它内部表示为float,所以转换成spark的时候需要指定float类型。
    • 感谢您的努力。但它不起作用。 data = [ 11,22,33,33,None] # 失败 #data = [ 11,22,33,33,55] # 成功 df = pd.DataFrame(data, columns = ['col']) df = df .where((pd.notnull(df)), None) print(df["col"]) df.info() struct_list = [] struct_list.append(StructField("col", LongType(), True)) mySchema = StructType(struct_list) df = self.spark.createDataFrame(df, mySchema).withColumn("col", df.col("col").cast("long"))
    • @Sachin 你不能在df的初始化中使用df.col("col"),因为df还没有被初始化。请改用F.colF 来自 import pyspark.sql.functions as F。请参阅我编辑的答案。
    猜你喜欢
    • 1970-01-01
    • 2016-09-27
    • 2020-07-24
    • 2016-01-03
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-24
    相关资源
    最近更新 更多