У меня есть две таблицы, к которым я присоединился в Spark. Я пытаюсь запустить операцию выбора результата объединения данных. Соединения выполнены успешно, но операция выбора вызывает исключение.
Я попытался разбить финальные объединения (операция выбора содержит 3 объединения). Но все еще остается исключение.
val a = "select * from db.tbl1"
val b = "select * from db.tbl2"
val df1= hive.executeQuery(a).toDF()
val df2= hive.executeQuery(b).toDF()
val df3=df1.as("d1").join(df2.as("d2"), ($"d1.col1" === $"d2.col1"))
df1.as("bs").join(df2.as("ds"),($"bs.col1" ===
$"ds.col1"),"left").join(df3.as("inf"),(($"ds.col1" === $"inf.col1") &&
($"ds.col2" === $"inf.col2") && ($"ds.col3" ===
$"inf.col3")),"left").select($"bs.col1",$"bs.col2",$"bs.col3",$"ds.col4
",$"inf.col5").show()
Я получаю следующее сообщение об ошибке:
java.lang.ArrayIndexOutOfBoundsException: 4 at org.apache.spark.sql.vectorized.ColumnarBatch.column(ColumnarBatch.java:98) в org.apache.spark.sql.catalyst.expressions.GeneratedClass $ GeneratedIteratorForCodegenStage1.datasourcev2scan_nextBatch_0 $ (Неизвестный источник) в org.apache.spark.sql.catalyst.expressions $Источник) в org.apache.spark.sql.execution.BufferedRowIterator.hasNext (BufferedRowIterator.java:43) в org.apache.spark.sql.execution.WholeStageCodegenExec $$ anonfun $ 10 $$ anon $ 1.hasNext (WholeStageCode: WholeStageCode614) на scala.collection. Итератор $$ anon $ 11.hasNext (Iterator.scala: 408)