【问题标题】:Change the Datatype of columns in PySpark dataframe更改 PySpark 数据框中列的数据类型
【发布时间】:2018-01-09 05:36:47
【问题描述】:

我有一个输入数据框(ip_df),这个数据框中的数据如下所示:

id            col_value
1               10
2               11
3               12

id和col_value的数据类型是String

我需要获取另一个数据帧(output_df),其数据类型为 id 为字符串,col_value 列为十进制**(15,4)**。没有数据转换,只有数据类型转换。 我可以使用 PySpark 使用它吗?任何帮助将不胜感激

【问题讨论】:

    标签: apache-spark pyspark spark-dataframe


    【解决方案1】:

    尝试使用cast 方法:

    from pyspark.sql.types import DecimalType
    <your code>
    output_df = ip_df.withColumn("col_value",ip_df["col_value"].cast(DecimalType()))
    

    【讨论】:

    • 它给出错误名称'DecimalType'未定义
    • 你需要导入
    • 从 pyspark.sql.types 导入 DecimalType
    【解决方案2】:

    试试下面的语句。

    output_df = ip_df.withColumn("col_value",ip_df["col_value"].cast('float'))
    

    【讨论】:

      【解决方案3】:

      您可以更改多种列类型

      • 使用withColumn() -
      from pyspark.sql.types import DecimalType, StringType
      
      output_df = ip_df \
        .withColumn("col_value", ip_df["col_value"].cast(DecimalType())) \
        .withColumn("id", ip_df["id"].cast(StringType()))
      
      • 使用select()
      from pyspark.sql.types import DecimalType, StringType
      
      output_df = ip_df.select(
        (ip_df.id.cast(StringType())).alias('id'),
        (ip_df.col_value.cast(DecimalType())).alias('col_value')
      )
      
      • 使用spark.sql()
      ip_df.createOrReplaceTempView("ip_df_view")
      
      output_df = spark.sql('''
      SELECT 
          STRING(id),
          DECIMAL(col_value)
      FROM ip_df_view;
      ''')
      

      【讨论】:

        猜你喜欢
        • 2022-07-07
        • 2018-01-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多