Join 火花连接挂起
我有一个包含n列的表,我将其称为a。在此表中,我需要三列:Join 火花连接挂起,join,apache-spark,Join,Apache Spark,我有一个包含n列的表,我将其称为a。在此表中,我需要三列: 增值税->字符串 税->字符串 卡片->字符串 增值税或税收可以为空,但不能同时为空。 增值税和税收的每一对独特的组合都至少有一张卡片 我需要更改此表,添加一列count\u card,其中我根据每个独特的税务和增值税组合的卡片数量添加了一个文本 所以我做到了: val cardCount = A.groupBy("tax", "vat").count val sqlCard = udf((count: Int) => {
- 增值税->字符串
- 税->字符串
- 卡片->字符串
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中,我现在有三列:
- 增值税->字符串
- 税->字符串
- 卡片计数->整数
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"))
val result=A.join(B,
B.col(“税”)A.col(“税”)和
B.col(“增值税”)A.col(“增值税”)
).下降(B.col(“税”))
.下降(B.col(“增值税”))
希望有原始表A和列card\ U count
问题是连接挂起,导致所有系统资源阻塞pc
其他详情:
- 表A包含约1.5M的元素,从拼花地板文件中读取李>
- 表B包含约130万个元素
- 系统是一个8线程和30GB的RAM
让我知道我做错了什么最后,我没有发现问题出在哪里,所以我改变了方法
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")))
如果有人知道更好的方法,请告诉我