Искра: Невозможно создать новый столбец из результатов заполнения пустых значений одного столбца из другого - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь заполнить нулевые значения из ColY значениями из ColX, сохраняя вывод как новый столбец в моем DataFrame Col_new. Я использую pyspark в блоках данных, однако я довольно новичок в этом.

Пример данных выглядит следующим образом:

ColX              ColY  
apple             orange
pear              null
grapefruit        pear
apple             null

Желаемый результат будет выглядеть следующим образом:

ColX              ColY              Col_new
apple             orange            orange  
pear              null              pear
grapefruit        pear              pear
apple             null              apple

Я пробовал несколько строк кода безрезультатно. Моя последняя попытка была следующей:

.withColumn("Col_new", col('ColX').select(coalesce('ColY')))

Любая помощь будет принята с благодарностью. Большое спасибо.

Ответы [ 2 ]

1 голос
/ 28 марта 2019

coalesce вернет первое ненулевое значение из списка столбцов.Вы передаете только один столбец, поэтому coalesce не имеет никакого эффекта.

В этом случае правильный синтаксис будет следующим:

from pyspark.sql.functions import coalesce
df = df.withColumn("Col_new", coalesce('ColY', 'ColX'))

Это означает, что принимается значение ColYесли это не null, в этом случае принять значение от ColX.

В этом случае вы также можете использовать when для эквивалентной логики:

from pyspark.sql.functions import when

df = df.withColumn(
    "Col_new", 
    when(col("ColY").isNull(), col("ColX")).otherwise(col("ColY"))
)
1 голос
/ 28 марта 2019

Оба столбца ColY и ColX должны быть указаны в качестве аргументов coalesce:

df = spark.createDataFrame([
  ("apple", "orange"),
  ("pear", None),
  ("grapefruit", "pear"),
  ("apple", None)
]).toDF("ColX", "ColY")

from pyspark.sql.functions import coalesce

df.withColumn("ColNew", coalesce("ColY", "ColX")).show()
+----------+------+------+
|      ColX|  ColY|ColNew|
+----------+------+------+
|     apple|orange|orange|
|      pear|  null|  pear|
|grapefruit|  pear|  pear|
|     apple|  null| apple|
+----------+------+------+
...