2016-06-29 11 views
1

私はSCALAに2つのRDDを持ち、それらをデータフレームに変換しました。 は今、私はprodiduidという名前の2つの列を持つ2つのdataframes.One prodUniqueDFを持って、それが製品スカラの2つのデータフレームの一致

scala> prodUniqueDF.printSchema 
root 
|-- prodid: string (nullable = true) 
|-- uid: long (nullable = false) 

のマスターデータをしている私はprodidという名前の列を持っている第二に、ratingsDFcustidratings

scala> ratingsDF.printSchema 
root 
|-- prodid: string (nullable = true) 
|-- custid: string (nullable = true) 
|-- ratings: integer (nullable = false) 

私は上記の2つに加わり、ratingsDF.prodidprodUniqueDF.uidに置き換えたいと思います。ratingsDF

これを行うために、私は、最初の 'tempTables'

prodUniqueDF.registerTempTable("prodUniqueDF") 
ratingsDF.registerTempTable("ratingsDF") 

として登録され、私は、コード

val testSql = sql("SELECT prodUniqueDF.uid, ratingsDF.custid, ratingsDF.ratings FROM prodUniqueDF, ratingsDF WHERE prodUniqueDF.prodid = ratingsDF.prodid") 

を実行しますが、エラーはのように来る:

org.apache.spark.sql.AnalysisException: Table not found: prodUniqueDF; line 1 pos 66 

してください助けて!どうすれば参加できますか?代わりにRDDをマッピングする別の方法がありますか?

+0

私のDataFrame knowldgeは素晴らしいものではありませんが、Dataframesに参加する方法が役立つでしょうか? –

答えて

1

データフレームの接合を容易に実現することができ、 フォーマットがデフォルトで

DataFrameA.join(DataFrameB) 

あり、それは内部結合かかりますが、あなたはまた、あなたがやりたいことを参加して、彼らはAPIを持っているのタイプを指定することができますそのためには こちらをご覧ください。

http://spark.apache.org/docs/latest/api/scala/#org.apache.spark.sql.DataFrame

あなたはAPI

からwithColumn方法の助けを借りることができ、既存の列の値を置き換えることはこのようなものになるだろう:

val newDF = dfA.withColumn("newColumnName", dfB("columnName"))).drop("columnName").withColumnRenamed("newColumnName", "columnName") 

私はこれがそうかもしれないと思いますトリック !

+0

ありがとう@Shivansh。私はRDDに参加しようとしました(DFで 'join 'が適切に動作するかどうかはわかりません)。しかし、既存の列を新しい値に置き換えてしまう問題があるようです。 – suvojyotic

+0

詳細な例があれば本当に助かります! – suvojyotic

+0

答えを更新しました。どうぞご覧ください。私はあなたが必要とするすべての助けを見つけることを願っています! –

関連する問題