Как изменить значения столбца в соответствии с размером - PullRequest
1 голос
/ 17 июня 2019

У меня есть датафрейм df в настройке PySpark.Я хочу изменить столбец, скажем, он называется A, тип данных которого "string".Я хочу изменить его значения в соответствии с их длиной.В частности, если в строке есть только символ, мы хотим объединить 0 до конца.В противном случае мы берем значение по умолчанию.Имя «модифицированного» столбца должно по-прежнему быть A. Это для ноутбука Jupyter, использующего PySpark3.

Это то, что я пробовал до сих пор:

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

Я также попробовал тот же код, удаляя "df.col".

Когда я запускаю этокод, программное обеспечение жалуется, говоря, что синтаксис является недействительным, но я не вижу ошибки.

Ответы [ 2 ]

0 голосов
/ 17 июня 2019
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.

0 голосов
/ 17 июня 2019

Слушай, детка ...

  1. Чтобы выбрать столбец из DF в pyspark , вы не должны использовать функцию "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))

За услугу!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...