2016-12-23 5 views
0

2つの異なるクエリ/テーブルの数を比較しようとしています。 Scala(Spark SQL)でこの操作を実行できますか?私はこれらのクエリはなくなってエラーの両方の差分値を取得しようとしていますスカラ:クエリ出力の比較を実行

val parquetFile1 = sqlContext.read.parquet("/user/njrbars2/ars/mbr_addr/2016/2016_000_njars_09665_mbr_addr.20161222031015221601.parquet") 
val parquetFile2 =sqlContext.read.parquet("/user/njrbars2/ars/mbr_addr/2017/part-r-00000-70ce4958-57fe-487f-a45b-d73b7ef20289.snappy.parquet") 
parquetFile1.registerTempTable("parquetFile1") 
parquetFile2.registerTempTable("parquetFile2") 

scala> var first_table_count=sqlContext.sql("select count(*) from parquetFile1") 
first_table_count: org.apache.spark.sql.DataFrame = [_c0: bigint] 

scala> var second_table_count=sqlContext.sql("select count(*) from parquetFile1 where LINE1_ADDR is NULL and LINE2_ADDR is NULL") 
second_table_count: org.apache.spark.sql.DataFrame = [_c0: bigint] 

scala> first_table_count.show() 
+------+ 
| _c0| 
+------+ 
|119928| 
+------+ 

scala> second_table_count.show() 
+---+ 
|_c0| 
+---+ 
|617| 
+---+ 

は、ここに私のコードです。私は通常のsubstractionをすれば、それは

scala> 2 - 1 
res7: Int = 1 

の作品に対し

scala> first_table_count - second_table_count 
<console>:30: error: value - is not a member of org.apache.spark.sql.DataFrame 
       first_table_count - second_table_count 

は、私がいくつかのデータ変換を行う必要があるが、適切な解決策を見つけることができないようです。あなたがそれを必要とする理由

first_table_count.first.getLong(0) 

そして、ここでは、次のとおりです:あなたは、変換を行うために、次のような何か必要

答えて

0

スパークカウントの新しいバージョンでは、代わりにLong値が返されます。代わりに、データフレームオブジェクト、つまりDataframe [BigInt]内に収められます。

あなたはこの

val diffrence = first_table_count.first.getLong(0) - second_table_count.first.getLong(0); 

を試してみて、この方法は、データフレームでは使用できません差し引くことができます。

+0

ありがとうAkash..itは私のために働いた..たくさんありがとう:) –

+0

この答えを上向きに忘れないでください –

0

Aデータフレームは、表形式のデータ構造を表しています。したがって、SQLは単一の値を返すように見えますが、実際には単一の行を含む表が返され、行には単一の列が含まれます。したがって、上記のコードを使用して、最初の行の最初の列(インデックス0)を抽出します。

+0

ありがとうございました。私はそれが間違っているところを今理解することができます。もう一度ありがとう.. –

関連する問題