java .lang.ClassCastException: org. apache .spark. sql .Column не может быть преобразован в scala .collection.Seq - PullRequest
0 голосов
/ 28 мая 2020

Я выполняю что-то подобное для использования правильного соединения в приложении Spark в java.

Dataset<Row> dataset3 = dataset1.join(dataset2, 
       (Seq<String>) dataset1.col("target_guid"),RightOuter.sql());

Но получаю эту ошибку

java.lang.ClassCastException: org.apache.spark.sql.Column cannot be 
cast to scala.collection.Seq

Кроме этого, я не мог Не нашел способа использовать объединения в java для наборов данных. Может ли кто-нибудь помочь мне найти способ сделать это?

Ответы [ 2 ]

0 голосов
/ 28 мая 2020

Если вы хотите использовать api набора данных ниже в java -

 def join(right: Dataset[_], usingColumns: Seq[String], joinType: String): DataFrame 

, тогда преобразуйте список строк в seq. Пожалуйста, сохраните метод ниже, чтобы преобразовать java list в scala seq, так как большинство apis искры принимают scala seq

import scala.collection.JavaConversions;
<T> Buffer<T> toScalaSeq(List<T> list) {
        return JavaConversions.asScalaBuffer(list);
    }

Также вы не можете использовать joinType как RightOuter.sql(), которое оценивается как 'RIGHT OUTER'. Поддерживаемый join types включает -

'inner', 'outer', 'full', 'fullouter', 'full_outer', 'leftouter', 'left', 'left_outer', 'rightouter', 'right', 'right_outer', 'leftsemi', 'left_semi', 'leftanti', 'left_anti', 'cross'

Теперь вы можете использовать -

Dataset<Row> dataset3 = dataset1.join(dataset2,
                toScalaSeq(Arrays.asList("target_guid")), "rightouter");
0 голосов
/ 28 мая 2020

Можете изменить свой код на что-то вроде этого,

Dataset<Row> dataset3 = dataset1.as("dataset1").join(dataset2.as("dataset2"),
                dataset1.col("target_guid").equalTo(dataset2.col("target_guid")), RightOuter.sql());
...