给出以下数据框
id | value
1 | 2
2 | 3
3 | 4
我想将所有值除以reference的值:与id 1相关的值
我想出了:
df.cache()
val ref = df
.filter($"id" === 1)
.withColumnRenamed("value", "ref")
df
.crossJoin(broadcast(ref))
.withColumn("div", $"value" / $"ref)
亲:
collect()
,因此数据不会发送到spark驱动程序。 cache()
来避免计算输入DataFrame
的2倍。有更好的方法吗?
答案 0 :(得分:0)
使用cache()来避免计算输入DataFrame的2倍。
这不正确。像所有其他spark操作一样的缓存是laze,除非调用某些操作,否则不会评估。所以当你这样做时
val ref = df
.filter($"id" === 1)
.withColumnRenamed("value", "ref")
df
.crossJoin(broadcast(ref))
.withColumn("div", $"value" / $"ref)
最终将同时评估调用save 2操作。如果您确实想立即缓存数据,则需要对缓存数据调用一些操作
df.count
可能是。