【问题标题】:How to change column values according to size如何根据大小更改列值
【发布时间】:2019-06-17 10:51:56
【问题描述】:

我在 PySpark 设置中有一个数据框 df。我想更改一列,比如说它叫做 A,它的数据类型是“string”。我想根据它们的长度改变它的值。特别是,如果一行中只有一个字符,我们希望将 0 连接到末尾。否则,我们采用默认值。 “已修改”列的名称仍必须为 A。这是针对使用 PySpark3 的 Jupyter Notebook。

这是我迄今为止尝试过的:

df = df.withColumn("A", when(size(df.col("A")) == 1, concat(df.col("A"), lit("0"))).otherwise(df.col("A")))

我也尝试使用相同的代码删除“df.col”。

当我运行此代码时,软件抱怨说语法无效,但我没有看到错误。

【问题讨论】:

    标签: python dataframe pyspark jupyter-notebook


    【解决方案1】:
    df.withColumn("temp", when(length(df.A) == 1, concat(df.A, lit("0"))).\
    otherwise(df.A)).drop("A").withColumnRenamed('temp', 'A')
    

    阅读您的问题后,我的理解是,您将获得一个额外的 A 列。

    因此,您希望将旧列 A 替换为新列 A。因此,我使用您所需的逻辑创建了一个临时列,然后删除了 A 列,然后将临时列重命名为 A。

    【讨论】:

      【解决方案2】:

      听着,孩子……

      1. 要从 pyspark 中的 DF 中选择一列,您不能使用“col”函数,因为它是一个 Scala/Java API。在 Pyspark 中,正确的方法是从 DF 中选择名称:df.colName。
      2. 要获取字符串的长度,请使用“length”函数。大小函数适用于可迭代对象。

      而对于伟大的解决方案......(鼓鼓鼓)

       df.withColumn("A", when(length(df.A) == 1, concat(df.A, lit("0"))).otherwise(df.A))
      

      保佑!

      【讨论】:

      • 第 1 点不正确,或者至少不准确,请检查 pyspark.sql.functions 以了解如何将 col 函数用于数据帧。
      猜你喜欢
      • 1970-01-01
      • 2021-07-13
      • 1970-01-01
      • 1970-01-01
      • 2014-11-02
      • 2023-03-11
      • 1970-01-01
      • 2014-01-30
      • 1970-01-01
      相关资源
      最近更新 更多