【问题标题】:casting to string of column for pyspark dataframe throws error转换为 pyspark 数据框的列字符串会引发错误
【发布时间】:2019-10-04 14:54:04
【问题描述】:

我有两列数据类型为的 pyspark 数据框

[('area', 'int'), ('customer_play_id', 'int')]

+----+----------------+
|area|customer_play_id|
+----+----------------+
| 100|        8606738 |
| 110|        8601843 |
| 130|        8602984 |
+----+----------------+

我想使用 pyspark 命令将列区域转换为 str,但出现如下错误

我在下面尝试过

  1. str(df['area']) : 但它没有将数据类型更改为 str
  2. df.area.astype(str):给出“TypeError:意外类型:”
  3. df['area'].cast(str) 同上错误

任何帮助将不胜感激 我希望使用 pyspark 数据框操作将区域的数据类型作为字符串

【问题讨论】:

    标签: pyspark


    【解决方案1】:

    你可以使用这个 UDF 函数

    from pyspark.sql.types import FloatType
    tofloatfunc = udf(lambda x: x,FloatType())
    changedTypedf = df.withColumn("Column_name", df["Column_name"].cast(FloatType()))
    

    【讨论】:

      【解决方案2】:

      你可以做任何这些 -

      选项1:

      df1 = df.select('*',df.area.cast("string"))
      

      select - df1 中需要的所有列都应在 select 中提及

      选项2:

      df1 = df.selectExpr("*","cast(area as string) AS new_area")
      

      selectExpr - selectExpr 中应提及您想要在 df1 中的所有列

      选项3:

      df1 = df.withColumn("new_area", df.area.cast("string"))
      

      withColumn 将添加新列(附加到 df 的现有列)

      selectselectExpr 中的“*”代表所有列。

      【讨论】:

      • 但是它将如何应用于完成 df。我的意思是在运行以上命令后数据类型发生了变化,但是当我打印 df.dtypes 时,我只得到一列而不是剩余的列
      • 编辑了我的答案。您需要将其分配给一个新的数据框。
      • 是的,但是在我将其分配给数据框后,它会将列数减少到 1,这将是唯一的区域
      • 你必须提到选择中的所有列,我已经编辑了我的答案。
      【解决方案3】:

      使用 withColumn 函数更改 spark 字段中的数据类型或值,例如如下图所示:

      import pyspark.sql.functions as F
      df = df.withColumn("area",F.col("area").cast("string"))
      

      【讨论】:

        猜你喜欢
        • 2017-12-19
        • 1970-01-01
        • 1970-01-01
        • 2021-08-06
        • 1970-01-01
        • 2021-05-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多