我有两个数据框
我希望给
我尝试使用udf,但显然从不同的数据框中选择将无法工作,因为值应在计算之前确定。
有没有办法使用
df1
。+---+---+----------+
| n|val| distances|
+---+---+----------+
| 1| 1|0.27308652|
| 2| 1|0.24969208|
| 3| 1|0.21314497|
+---+---+----------+
and df2
+---+---+----------+
| x1| x2| w|
+---+---+----------+
| 1| 2|0.03103427|
| 1| 4|0.19012526|
| 1| 10|0.26805446|
| 1| 8|0.26825935|
+---+---+----------+
我希望给
df1
添加一个名为 gamma
的新列,该列将包含在 df2
中当 df1.n == df2.x1 OR df1.n == df2.x2
时,w
值的总和。我尝试使用udf,但显然从不同的数据框中选择将无法工作,因为值应在计算之前确定。
gamma_udf = udf(lambda n: float(df2.filter("x1 = %d OR x2 = %d"%(n,n)).groupBy().sum('w').rdd.map(lambda x: x).collect()[0]), FloatType())
df1.withColumn('gamma1', gamma_udf('n'))
有没有办法使用
join
或groupby
而不使用循环来完成它?