Dataframe 如何使用来自另一个数据帧的随机值更新Pyspark中的数据帧?
我在pyspark中有两个数据帧,如下所示: 数据帧A:共1000条记录Dataframe 如何使用来自另一个数据帧的随机值更新Pyspark中的数据帧?,dataframe,apache-spark,pyspark,apache-spark-sql,pyspark-dataframes,Dataframe,Apache Spark,Pyspark,Apache Spark Sql,Pyspark Dataframes,我在pyspark中有两个数据帧,如下所示: 数据帧A:共1000条记录 +-----+ |Name | +-----+ | a| | b| | c| +-----+ 数据框B:共3条记录 +-----+ |Zip | +-----+ |06905| |06901| |06902| +-----+ 我需要在Dataframe a中添加一个名为Zip的新列,并使用从Dataframe B中随机选择的值填充这些值。因此Dataframe a将如下所示: +-----+----
+-----+
|Name |
+-----+
| a|
| b|
| c|
+-----+
数据框B:共3条记录
+-----+
|Zip |
+-----+
|06905|
|06901|
|06902|
+-----+
我需要在Dataframe a中添加一个名为Zip的新列,并使用从Dataframe B中随机选择的值填充这些值。因此Dataframe a将如下所示:
+-----+-----+
|Name |Zip |
+-----+-----+
| a|06901|
| b|06905|
| c|06902|
| d|06902|
+-----+-----+
请帮我写这段代码。非常感谢你的帮助
我在Azure Databricks上运行这个,显然,quinn不是其中的一个模块。因此,很遗憾,不能使用quinn。您可以使用ZIP对数据帧进行聚合,并将值收集到一个数组列中,然后进行交叉连接,并从ZIP数组中选择一个随机元素,例如,在选择第一个元素之前在数组中使用:
from pyspark.sql import functions as F
df_result = df_a.crossJoin(
df_b.agg(F.collect_list("Zip").alias("Zip"))
).withColumn(
"Zip",
F.expr("shuffle(Zip)[0]")
)
#+----+-----+
#|Name| Zip|
#+----+-----+
#| a|06901|
#| b|06902|
#| c|06901|
#| d|06901|
#+----+-----+
如果
b
很小(3行),您可以将其收集到Python列表中,并将其作为数组列添加到a
。然后可以使用shuffle
获得一个随机元素
import pyspark.sql.functions as F
df = a.withColumn(
'Zip',
F.shuffle(
F.array(*[F.lit(r[0]) for r in b.collect()])
)[0]
)
df.show()
+----+-----+
|Name| Zip|
+----+-----+
| a|06901|
| b|06905|
| c|06902|
| d|06901|
+----+-----+