我有两个数据框
df_1 = spark.createDataFrame(
[(1, [(1), (4), (2) ,(3)])],
("id", "transactions")
)
df_2 = spark.createDataFrame(
[([ (1),(2),(3)], 2.0) ],
("items", "cost")
)
我有一个UDF来检查一个数组的所有元素是否存在于另一个数组中。
我使用spark 2.2
@udf("boolean")
def contains_all(x, y):
if x is not None and y is not None:
return set(y).issubset(set(x))
costs=(df_1
.crossJoin(df_2.groupBy("id", "transactions")
.agg(sum_(when(
contains_all("transactions", "items"), col("cost")
)).alias("score")))
由于其中一个数据帧(df_2)非常大,因此上述代码非常慢(已经一天并且仍在运行)。
如何执行上述操作以并行运行? 我应该将数据帧转换为rdd吗?有什么办法可以加快速度吗? 这种类型的任何例子都很好。