0

Ich habe zwei der Datenrahmen (Funke Scala) wie unten:Kartesisches Produkt von zwei Datenrahmen und Summe der Cartesion in 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))) 

Zuerst muss ich über zwei df des Kartesischen und Summation der Arraywerte erzeugen.

beispiel ist cartesianischen wie unten:

((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)))) 

Kartesischen und Summation wie folgt:

Array ((11,1 * 4 + 2 + 3 * 5 * 6), (12,1 * 3 + 2 * 5 + 3 * 6), (21, (1 * 4 + 2 * 5 + 4 * 6)) (22, (1 * 3 + 2 * 5 + 4 * 6))

Ich habe versucht, Cartesian wie folgt:

scala> val cart=df1.cartesian(df2) 

aber ich bekomme er ror

<console>:41: error: value cartesian is not a member of org.apache.spark.sql.DataFrame 

danach i df rdd umgewandelt haben RDD.ie mit df.rdd nach, dass ich versucht habe ufrdd.cartesian(miftrdd).map{ case ((k1, v1), (k2, v2)) => (((k1.toString).zip(k2.toString))) -> v1.zip(v2).map(x => x._1 * x._2).reduce(_ + _) }.foreach(println) aber ich bin immer Fehler wie

error: constructor cannot be instantiated to expected type; 
found : (T1, T2) 
required: org.apache.spark.sql.Row 

bitte helfen Sie mir zu diesem Thema, wie zu erreichen

Array ((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))

Antwort

2

Beca verwenden Sie konvertieren von Dataframe zu rdd so hat RDD RDD[Row] nicht RDD[(Int, List[Int])]. Sie können Datenrahmen in Dataset umwandeln as[(Int, List[Int])], dann Datensatz in rdd um .rdd, Sie werden RDD[(Int, List[Int])] erhalten.

Ich denke, Rest des Codes wird völlig in Ordnung.

Verwandte Themen