2017-03-07 23 views
-1

df1.portfolioの名前に基づいて2つのデータフレームをdf2.portIdに結合しようとしています 結果のデータフレーム私は同じキーを繰り返すことは望ましくありません。 spark cantは左外部結合を使用してデータフレームを結合します

は、ここでは、これまで

val df = spark.read.json("C:\\json\\portmast") 
val pgetsec = spark.read.json("C:\\json\\pgetsec") 


val portfolio_master = df.select("PortfolioCode","Legal Entity Name","Asofdate") 
val pgetsecs= pgetsec.select("TransId", "SecId","portId","GaapCurBkBal","ParBal","SetlDt","SetlPric","OrgBkBal","TradeDt","StatCurBkBal","NaicRtg","SecurityTypeCode","CamraSecType","FundType","CountryIso") 
val pg = portfolio_master.join(pgetsec,Seq("PortfolioCode","portId"),"left_outer") 

私は取得していますエラーが
Exception in thread "main" org.apache.spark.sql.AnalysisException: using columns ['PortfolioCode,'portId] can not be resolved given input columns: 最終JSONはすべてのヘルプは高く評価され、この

|-- Portfolio Code: string (nullable = true) 
|-- Legal Entity Name: string (nullable = true) 
|-- Asofdate: string (nullable = true) 

((SI, S&P 500 Index,9/30/2016),[0.0,Equity,Common Stock]) 
((SI, S&P 500 Index,9/30/2016),[0.0,Equity,Common Stock]) 
((SI, S&P 500 Index,9/30/2016),[0.0,Equity,Common Stock]) 
[SI1, S&P 500 Index,9/30/2016,CompactBuffer([0.0,Equity,Common  Stock], [0.0,Equity,Common Stock], [0.0,Equity,Common Stock])] 
root 
|-- Portfolio Code: string (nullable = true) 
|-- Legal Entity Name: string (nullable = true) 
|-- Asofdate: string (nullable = true) 
|-- Security: array (nullable = true) 
| |-- element: struct (containsNull = true) 
| | |-- BondPrice: double (nullable = true) 
| | |-- CoreSectorLevel1Code: string (nullable = true) 
| | |-- CoreSectorLevel2Code: string (nullable = true) 

+--------------+-------------------+---------+--------------------+ 
|Portfolio Code| Legal Entity Name| Asofdate|   Security| 
+--------------+-------------------+---------+--------------------+ 
|   SI | S&P 500 Index  |9/30/2016|[[0.0,Equity,Comm...| 
+--------------+-------------------+---------+--------------------+ 

ようになっているはずである私のコードです。

+0

参加しようとしている列が2番目のDataFrameに存在しません。 – eliasah

+0

は両方ともJsonファイルで、ファイル1ではportCode、2番目のJsonファイルではportIdと呼ばれています。キーの背後にあるデータは同じですp.portfoliocode、...、ps.secid、ps.Transid、....をportfolio_masterから選択します。pはpgetsecodeをp.portfoliocode = ps.portidに接続します – user2315840

答えて

1

portIdportfolio_masterにはありません。PortfolioCodeは、pgetsecには存在しません。完全なエラーメッセージを再度読んだら、利用可能な列も表示されるので、これを説明しています。

あなたの参加条件はportfolio_master("PortfolioCode") === pgetsec("portId")です。

+0

結果のjsonを作成して、すべてのレコードのキー情報を繰り返さないようにします。 – user2315840

+0

次に、結合後にキー列の1つを削除するか、結合前に名前を変更して同じであるようにしますあなたのような参加は前にありました。 – puhlen

+0

最終的なjsonスキーマを表示するための質問の更新とデータの表示方法 – user2315840

関連する問題