如何根据大小更改列值

时间:2019-06-17 10:51:56

标签: python dataframe pyspark jupyter-notebook

我在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”。

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

2 个答案:

答案 0 :(得分:0)

在这里听孩子...

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

对于宏伟的解决方案...(鼓声)

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

拜托!

答案 1 :(得分:0)

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。