我有一个包含n列的表,我将其称为A.在此表中,我需要三列:
vat 或 tax 可以为null,但不能同时为null。 对于每个独特的 vat 和 tax ,至少有一个卡。
我需要更改此表格,添加一列 count_card ,其中我根据卡片的数量放置了一个文本 tax 和 vat的每个独特组合有。
所以我做到了这一点:
val cardCount = A.groupBy("tax", "vat").count
val sqlCard = udf((count: Int) => {
if (count > 1)
"MULTI"
else
"MONO"
})
val B = cardCount.withColumn(
"card_count",
sqlCard(cardCount.col("count"))
).drop("count")
在表B中,我现在有三列:
并且此DataFrame上的每个操作都是平滑的。
现在,因为我想在 A 表中导入新列,所以我执行了以下连接:
val result = A.join(B,
B.col("tax")<=>A.col("tax") and
B.col("vat")<=>A.col("vat")
).drop(B.col("tax"))
.drop(B.col("vat"))
期望原始表格A包含 card_count 列。
问题是连接挂起,导致所有系统资源阻塞了电脑。
其他详情:
让我知道我做错了什么
答案 0 :(得分:1)
最后,我没有发现问题是什么,所以我改变了方法
val cardCount = A.groupBy("tax", "vat").count
val cardCountSet = cardCount.filter(cardCount.col("count") > 1)
.rdd.map(r => r(0) + " " + r(1)).collect().toSet
val udfCardCount = udf((tax: String, vat:String) => {
if (cardCountSet.contains(tax + " " + vat))
"MULTI"
else
"MONO"
})
val result = A.withColumn("card_count",
udfCardCount(A.col("tax"), A.col("vat")))
如果有人知道更好的方法让我知道