【发布时间】:2019-03-06 14:46:44
【问题描述】:
我有以下数据框(称为df),其中包含item_name 和item_level 列:
item_name item_level
----------------------------
Item1 1
Item2 2
Item3 2
Item4 3
我想创建一个新列,根据它们的级别生成项目的缩进。为此,我想将 item_level 乘以字符串 '---',其想法是,当我这样做时,字符串与自身连接的次数与我将字符串相乘的整数值一样多。
我想要的结果是这样的:
item_name item_level new_column
------------------------------------------------
Item1 1 ---Item1
Item2 2 ------Item2
Item3 2 ------Item3
Item4 3 ---------Item4
在 pyspark 中,当我编写以下命令时,创建的列仅包含 null 值:
from pyspark.sql import functions as F
df = df.withColumn('new_column',F.concat(F.lit(df.item_level*'---'),df.item_name))
null 值似乎来自整数与字符串的乘积。 concat 函数似乎工作正常。例如,以下工作:
df = df.withColumn('new_column',F.concat(df.item_name,df.item_name))
我还尝试了其他一些方法。如果我使用一个常数来乘以字符串,结果字符串会如愿显示:
number = 3
df = df.withColumn('new_column', F.lit(number*'---'))
此外,首先在列中添加“---”字符串(具有相同的行“---”),然后将该列与 item_level 列相乘也会得到空值:
df = df.withColumn('padding',F.lit('---'))
df = df.withColumn('test',df.padding*df.item_name)
但是,如果我使用 pandas,那么最后一段代码可以满足我的要求。但我需要在 pyspark 中执行此操作。
【问题讨论】:
标签: python apache-spark pyspark apache-spark-sql string-concatenation