我尝试用pandas中的随机值初始化新列。我是这样
df['business_vertical'] = np.random.choice(['Retail', 'SME', 'Cor'], df.shape[0])
我如何在pyspark中做到这一点?
答案 0 :(得分:5)
只需生成一个值列表,然后随机提取它们即可:
from pyspark.sql import functions as F
df.withColumn(
"business_vertical",
F.array(
F.lit("Retail"),
F.lit("SME"),
F.lit("Cor"),
).getItem(
(F.rand()*3).cast("int")
)
)
答案 1 :(得分:1)
以下是通过quinn中的array_choice
函数来解决此问题的方法:
import quinn
df = spark.createDataFrame([('a',), ('b',), ('c',)], ['letter'])
cols = list(map(lambda c: F.lit(c), ['Retail', 'SME', 'Cor']))
df.withColumn('business_vertical', quinn.array_choice(F.array(cols))).show()
+------+-----------------+
|letter|business_vertical|
+------+-----------------+
| a| SME|
| b| Retail|
| c| SME|
+------+-----------------+
array_choice
是通用的,可以轻松地用于从现有ArrayType列中选择随机值。假设您具有以下DataFrame。
+------------+
| letters|
+------------+
| [a, b, c]|
|[a, b, c, d]|
| [x]|
| []|
+------------+
在这里,您可以获取随机字母。
actual_df = df.withColumn(
"random_letter",
quinn.array_choice(F.col("letters"))
)
actual_df.show()
+------------+-------------+
| letters|random_letter|
+------------+-------------+
| [a, b, c]| a|
|[a, b, c, d]| d|
| [x]| x|
| []| null|
+------------+-------------+
这是array_choice
函数的定义:
def array_choice(col):
index = (F.rand()*F.size(col)).cast("int")
return col[index]
此post详细说明了如何从PySpark数组中获取随机值。
答案 2 :(得分:0)
您可以使用pyspark.sql.functions.rand()
df.withColumn('rand_col', F.rand()).show()
答案 3 :(得分:-1)
对于随机数:
import random
randomnum= random.randint(1000,9999)
import org.apache.spark.sql.functions.lit
val newdf = df.withColumn("newcol",lit("your-random"))
s1 = pd.Series([1, np.nan])
s2 = pd.Series([3, 4])
s1.combine_first(s2)