在pyspark中,可以用另一列填充吗?

时间:2018-08-21 15:58:15

标签: apache-spark pyspark

假设有一个RDD如下:

+----+--------------+-----+
| age|best_guess_age| name|
+----+--------------+-----+
|  23|            23|Alice|
|null|            18|  Bob|
|  34|            32|  Tom|
|null|            40|Linda|
+----+--------------+-----+

我们希望在age列为空的情况下用best_guess_age列填充

fillna command需要一个实际值来代替na,我们不能简单地传递一个列。

该怎么做?

1 个答案:

答案 0 :(得分:3)

您可以使用coalesce功能;通过执行coalesce('age', 'best_guess_age'),它将从age列中获取值(如果不为空),否则将从best_guess_age列中获取值:

from pyspark.sql.functions import coalesce
df.withColumn('age', coalesce('age', 'best_guess_age')).show()
+---+--------------+-----+
|age|best_guess_age| name|
+---+--------------+-----+
| 23|            23|Alice|
| 18|            18|  Bob|
| 34|            32|  Tom|
| 40|            40|Linda|
+---+--------------+-----+