2016-04-23 9 views
1

テーブル(寄木細工)に格納されているjsonファイルのネストされた属性にアクセスしようとしています。私はテーブルのすべてのレコードにアクセスすることができます select * from test;スパークSQLでネストされた属性にアクセスする方法

しかし、私のようにクエリを記述することで、ネストされた属性にアクセスすることはできませんよ: ヴァルタブ= sqlContext.sql(「テストLIMIT 1からテキスト、user.screen_nameを選択」)

スキーマは以下の通りです:

以下は
|-- text: string (nullable = true) 
| |-- truncated: boolean (nullable = true) 
| |-- user: struct (nullable = true) 
| | |-- created_at: string (nullable = true) 
| | |-- id: long (nullable = true) 
| | |-- id_str: string (nullable = true) 
| | |-- is_translator: boolean (nullable = true) 
| | |-- lang: string (nullable = true) 
| | |-- location: string (nullable = true) 
| | |-- name: string (nullable = true) 
| | |-- screen_name: string (nullable = true) 

私のコードです:

import scala.tools.nsc.doc.model.Object 
import scala.tools.nsc.interactive.Main 
import org.apache.spark.SparkConf 
import org.apache.spark.SparkContext 
import org.apache.spark.SparkContext._ 
import org.apache.spark.sql._ 
import org.apache.spark.sql.SQLContext 


object SimpleSparkSQL { 
def main(args:Array[String]) { 
val path = args(0); 
val conf = new SparkConf().setAppName("Simple   Application").setMaster("local[2]").set("spark.executor.memory", "1g") 
val sc = new SparkContext(conf) 
val data = sc.textFile(path) 

val sqlContext = new org.apache.spark.sql.SQLContext(sc) 
import sqlContext.implicits._ 

val sqlc = new SQLContext(sc) 
val df = sqlc.read.json(data) 

df.select("text", "user.screen_name").write.format("parquet").save("staging.parquet") 
val parquetFile = sqlContext.read.parquet("staging.parquet") 
parquetFile.registerTempTable("test") 
//= 514621627494322176 where user.screen_name='abyschan' 
val tab= sqlContext.sql("select * from test LIMIT 1") 
df.printSchema() 
tab.collect().foreach{println} 

    } 

} 

注:選択*テストから正常に動作しますが、私は(ネストされた属性)user.screen_nameを選択しようとすると、私がGETTです「user.screen_nameを解決できません」というエラーが表示される

+0

あなたはおそらくあなたが期待している動作と実際に得ているものを含めるべきでしょう。 –

答えて

1

スキーマによれば、text.user.screen_nameを選択する必要があります。

1

私は以下のクエリで使用しました。

ヴァルタブ= sqlContext.sql(私が持っているので。「SCREEN_NAMEを選択SCREEN_NAMEのDESCのLIMIT 1でテストグループから(テキスト)カウント」それはちょうどSCREEN_NAMEが、user.screen_nameを使用する必要はありませんでした使用して働いていた

それで、jsonのネストされた属性にアクセスするために '。'が必要ではありません。

+1

テーブルを作成しているので、user.screen_nameを使用する必要はありませんが、screen_nameだけが動作します。 –

関連する問題