Объединение таблиц работает, но запрос на выбор дает проблемы в искре - PullRequest
0 голосов
/ 15 октября 2019

У меня есть две таблицы, к которым я присоединился в 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)

...