Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.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
java.lang.ClassCastException:org.apache.spark.sql.Column无法强制转换为scala.collection.Seq_Java_Scala_Apache Spark - Fatal编程技术网

java.lang.ClassCastException:org.apache.spark.sql.Column无法强制转换为scala.collection.Seq

java.lang.ClassCastException:org.apache.spark.sql.Column无法强制转换为scala.collection.Seq,java,scala,apache-spark,Java,Scala,Apache Spark,为了在java中的spark应用程序中使用RightJoin,我正在执行类似的操作 Dataset<Row> dataset3 = dataset1.join(dataset2, (Seq<String>) dataset1.col("target_guid"),RightOuter.sql()); 除此之外,我找不到在java中为数据集使用连接的方法。 有人能帮我找到一种方法吗?可以将您的代码改成这样 Dataset<Row> datase

为了在java中的spark应用程序中使用RightJoin,我正在执行类似的操作

Dataset<Row> dataset3 = dataset1.join(dataset2, 
       (Seq<String>) dataset1.col("target_guid"),RightOuter.sql());
除此之外,我找不到在java中为数据集使用连接的方法。
有人能帮我找到一种方法吗?

可以将您的代码改成这样

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

如果您想在java中使用以下数据集api-

 def join(right: Dataset[_], usingColumns: Seq[String], joinType: String): DataFrame 
然后将字符串列表转换为seq。由于大多数spark API都接受
scala-seq

导入scala.collection.JavaConversions;
缓冲区toScalaSeq(列表){
返回JavaConversions.asScalaBuffer(列表);
}
另外,您不能将
joinType
用作
righouter.sql()
,它的计算结果为
“RIGHT OUTER”
。支持的连接类型包括-

'inner', 'outer', 'full', 'fullouter', 'full_outer', 'leftouter', 'left', 'left_outer', 'rightouter', 'right', 'right_outer', 'leftsemi', 'left_semi', 'leftanti', 'left_anti', 'cross'
现在你可以使用-

dataset3=dataset1.join(dataset2,
toScalaSeq(Arrays.asList(“target_guid”),“righouter”);

请参考:是的,先生,但这是给scala的。我在java中需要它。你打算加入哪些专栏?@Moulikapolisety,你能检查我的答案并向上投票+接受它是否对你有帮助吗?@SomeshwarKale是的,先生,检查过了。请检查您答案下方的评论。无法在此处标记u。此命令引发以下错误:
org.apache.spark.sql.AnalysisException:引用“target\u guid”不明确,可能是:target\u guid,target\u guid
更新代码以避免歧义@Moulikapolisetty这是连接数据,但结果数据集的计数要高得多(比两个输入数据集高10倍),而不是唯一的数据集。如果您想从
数据集1
数据集2
获得公共
目标guid
,请使用“内部”为了表示内部joindataset1有多个列,其中一个是target_guid(主)dataset2只有一个列target_guid我想比较dataset1中的target_guid与dataset2中的target_guid。dataset2中的目标guid应该与dataset1中的其他列一起出现。你能用正确的输入数据集和预期的输出将其作为saperate问题发布吗?我想我们已经解决了
java.lang.ClassCastException:org.apache.spark.sql.Column不能强制转换为scala.collection.Seq
,否?您提出了查询吗?如果有帮助,请接受并投票
'inner', 'outer', 'full', 'fullouter', 'full_outer', 'leftouter', 'left', 'left_outer', 'rightouter', 'right', 'right_outer', 'leftsemi', 'left_semi', 'leftanti', 'left_anti', 'cross'