Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Join 火花连接挂起_Join_Apache Spark - Fatal编程技术网

Join 火花连接挂起

Join 火花连接挂起,join,apache-spark,Join,Apache Spark,我有一个包含n列的表,我将其称为a。在此表中,我需要三列: 增值税->字符串 税->字符串 卡片->字符串 增值税或税收可以为空,但不能同时为空。 增值税和税收的每一对独特的组合都至少有一张卡片 我需要更改此表,添加一列count\u card,其中我根据每个独特的税务和增值税组合的卡片数量添加了一个文本 所以我做到了: val cardCount = A.groupBy("tax", "vat").count val sqlCard = udf((count: Int) => {

我有一个包含n列的表,我将其称为a。在此表中,我需要三列:

  • 增值税->字符串
  • 税->字符串
  • 卡片->字符串
增值税或税收可以为空,但不能同时为空。 增值税和税收的每一对独特的组合都至少有一张卡片

我需要更改此表,添加一列count\u card,其中我根据每个独特的税务和增值税组合的卡片数量添加了一个文本

所以我做到了:

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")))
如果有人知道更好的方法,请告诉我