У меня есть следующий фрейм данных (называемый 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)
Однако, если я использую панд, этот последний фрагмент кода делает то, что я хочу.Но мне нужно сделать это в pyspark.