在Pyspark填写na随机数字

时间:2017-05-24 08:54:55

标签: dataframe random pyspark

我正在使用Pyspark DataFrame。

我希望使用14到46之间的随机值更新 Age 列中的NA值。

我该怎么做?

2 个答案:

答案 0 :(得分:4)

如果你想用相同的随机数替换空值,玛拉的答案是正确的,但是如果你喜欢每个年龄的随机值,你应该做一些合并和F.rand ()如下图所示:

import pyspark.sql.functions as F
from pyspark.sql.functions import lit
from pyspark.sql.types import IntegerType
from random import randint

df = sqlContext.createDataFrame(
    [(1, "a", 23.0), (3, "B", -23.0)], ("x1", "x2", "x3"))

df = (df
    .withColumn("x4", F.lit(None).cast(IntegerType()))
    .withColumn("x5", F.lit(None).cast(IntegerType()))
    )

df.na.fill({'x4':randint(0,100)}).show()
df.withColumn('x5', F.coalesce(F.col('x5'), (F.round(F.rand()*100)))).show()


+---+---+-----+---+----+
| x1| x2|   x3| x4|  x5|
+---+---+-----+---+----+
|  1|  a| 23.0|  9|null|
|  3|  B|-23.0|  9|null|
+---+---+-----+---+----+
+---+---+-----+----+----+
| x1| x2|   x3|  x4|  x5|
+---+---+-----+----+----+
|  1|  a| 23.0|null|44.0|
|  3|  B|-23.0|null| 2.0|
+---+---+-----+----+----+

答案 1 :(得分:0)

randint函数是你需要的:它在两个数字之间生成一个随机整数。将其应用于'age'列的fillna spark函数。

from random import randint
df.fillna(randint(14, 46), 'age').show()