两个数据帧的笛卡尔积和笛卡尔的和会产生火花(scala)?
我有两个数据帧(Spark scala),如下所示:两个数据帧的笛卡尔积和笛卡尔的和会产生火花(scala)?,scala,apache-spark,apache-spark-sql,spark-dataframe,scala-collections,Scala,Apache Spark,Apache Spark Sql,Spark Dataframe,Scala Collections,我有两个数据帧(Spark scala),如下所示: df1 is Array((1,WrappedArray(1,2,3)),(2,WrappedArray(1,2,4))) org.apache.spark.sql.DataFrame = [id: int, features: array<float>] df2 is Array((1,WrappedArray(4,5,6)),(2,WrappedArray(3,5,6))) 笛卡尔和求和如下所示: ((11,(Array(
df1 is Array((1,WrappedArray(1,2,3)),(2,WrappedArray(1,2,4)))
org.apache.spark.sql.DataFrame = [id: int, features: array<float>]
df2 is Array((1,WrappedArray(4,5,6)),(2,WrappedArray(3,5,6)))
笛卡尔和求和如下所示:
((11,(Array(1,2,3),Array(4,5,6))),(12,(Array(1,2,3),Array(3,5,6))),(21,(Array(1,2,4),Array(4,5,6))),(22,(Array(1,2,4),Array(3,5,6))))
数组((11,1*4+2*5+3*6),(12,1*3+2*5+3*6),(21,(1*4+2*5+4*6))(22,(1*3+2*5+4*6))
我尝试过笛卡尔式,如下所示:
scala> val cart=df1.cartesian(df2)
但我犯了一个错误
<console>:41: error: value cartesian is not a member of org.apache.spark.sql.DataFrame
请帮助我在这方面如何实现
数组((11,1*4+2*5+3*6),(12,1*3+2*5+3*6),(21,(1*4+2*5+4*6))(22,(1*3+2*5+4*6))因为从数据帧转换为rdd,所以rdd的类型是
rdd[Row]
不是rdd[(Int,List[Int])
。
您可以通过as[(Int,List[Int])]
将数据帧转换为数据集,然后通过将数据集转换为rdd。rdd
,您将获得rdd[(Int,List[Int])]
我认为其余的代码可以完全正常工作。因为您将数据帧转换为rdd,所以rdd的类型是
rdd[Row]
而不是rdd[(Int,List[Int])]
。
您可以通过as[(Int,List[Int])]
将数据帧转换为数据集,然后通过将数据集转换为rdd。rdd
,您将获得rdd[(Int,List[Int])]
我认为代码的其余部分将完全正常工作
error: constructor cannot be instantiated to expected type;
found : (T1, T2)
required: org.apache.spark.sql.Row