2017-01-27 8 views
1

私は同じスキーマ有する二つのテーブルがあります。Spark SQL - 2つのテーブルを結合する:列名を参照する方法?

var champs = List( StructField("nom" , StringType, true), 
        StructField("heure " , StringType, true), 
        StructField("velo" , StringType, true), 
        StructField("action" , StringType, true)) 
var schema = StructType(champs) 

を私はsparkSQLで、古典的なSQLを使用してそれらを結合しよう:

Select distinct p.nom, p.velo, p.action, p.heure, r.action, r.heure 
from prises as p, 
     rendus as r 
WHERE p.velo == r.velo 

しかし、私はエラーを取得する:

Name: org.apache.spark.sql.AnalysisException 
Message: cannot resolve '`p.heure`' given input columns: [heure , heure , velo, velo, action, nom, action, nom]; line 2 pos 41; 

ですこの種の問い合わせは可能ですか?

私は人々が[join]メソッドをデータフレームから使用する多くのページを参照しています。それが唯一の方法だろうか?

EDIT 1

val requete = s""" 
Select distinct p.nom, p.velo, p.action, p.heure, r.action, r.heure 
from prises p 
join rendus r 
    on (p.velo = r.velo) 
""" 

sqlContext.sql(requete).show() 

はエラーを返すための:

Name: org.apache.spark.sql.AnalysisException 
Message: cannot resolve '`p.heure`' given input columns: [action, nom, nom, heure , heure , velo, velo, action]; line 2 pos 43; 

EDIT 2

同じ:

val requete = s""" 
SELECT DISTINCT p.nom, p.velo, p.action, p.heure, r.action, r.heure 
FROM  prises AS p 
INNER JOIN rendus AS r 
ON p.velo = r.velo 
""" 
sqlContext.sql(requete).show() 

はエラーを与える:

Name: org.apache.spark.sql.AnalysisException 
Message: cannot resolve '`p.heure`' given input columns: [action, nom, nom, heure , heure , velo, velo, action]; line 2 pos 41; 
+1

atmをテストすることはできませんが、カンマ結合構文(絶対に使用しないで明示的に結合を書き出す)またはwhere句の不正なdouble equalsと混同される可能性があります。 –

+0

@MK。あなたは両方のカウントで正しいです – JohnHC

答えて

0

[OKこれは本当に答えではありませんが、]

でなければなりません。エラーメッセージを見てください:カラム名とカンマの間にスペースがあり、そうでないものがあります。

また、適切なJOIN構文を使用してください。カンマ結合は、常に判読不能な混乱を招く恐れがあります。また、SQLでは、単一の等号を使用します。 !=の代わりに<>を使用しています(ただし、!=は多くの場所で合法ですが、残念ながら)。

+0

末尾のスペースの列 - 私のせい:-(あなたは鋭い目を持っています! –

0

@MK。

てみスパークは、(加入のための単一の演算子)明示的なJOIN構文を使用して、こう述べています。

Select distinct p.nom, p.velo, p.action, p.heure, r.action, r.heure 
from prises p 
join rendus r 
    on (p.velo = r.velo) 

は、より多くの情報

0

ためHive documentationをチェッククエリは次のようになります。

SELECT DISTINCT p.nom, p.velo, p.action, p.heure, r.action, r.heure 
     FROM prises AS p 
     INNER JOIN rednus AS r 
ON p.velo = r.velo 

お知らせ問題は==を使用していることです。それはあなたが何らかの形であなたの列の末尾にスペースを持っている=

関連する問題