私は同じスキーマ有する二つのテーブルがあります。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;
atmをテストすることはできませんが、カンマ結合構文(絶対に使用しないで明示的に結合を書き出す)またはwhere句の不正なdouble equalsと混同される可能性があります。 –
@MK。あなたは両方のカウントで正しいです – JohnHC