2016-03-30 17 views
0

こんにちは私はgz.parquetファイルからデータを読み込む必要がありますが、方法はわかりません。インパラを試してみましたが、テーブル構造のないparquet-tools catと同じ結果になります。gz.parquetファイルを読む

P.S:スパークコードを改善するための提案は、大歓迎です。

私はツイッター=>水路=>カフカ=>スパークストリーミング=>ハイブ/ gz.parquetファイルで作成されたデータパイプライン)の結果として、以下の寄木細工のファイルにgz.parquetを持っています。水路エージェントiについてagent1.sources.twitter-data.type = org.apache.flume.source.twitter.TwitterSource

スパークコードデキューにカフカからのデータを使用していますが、次のようにハイブに保存する:

val sparkConf = new SparkConf().setAppName("KafkaTweet2Hive") 

val sc = new SparkContext(sparkConf) 

val ssc = new StreamingContext(sc, Seconds(2)) 
val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)//new org.apache.spark.sql.SQLContext(sc) 

// Create direct kafka stream with brokers and topics 
val topicsSet = topics.split(",").toSet 
val kafkaParams = Map[String, String]("metadata.broker.list" -> brokers) 
val messages = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](
    ssc, kafkaParams, topicsSet) 

// Get the data (tweets) from kafka 
val tweets = messages.map(_._2) 


//adding the tweets to Hive 

tweets.foreachRDD { rdd => 


    val hiveContext = SQLContext.getOrCreate(rdd.sparkContext) 

    import sqlContext.implicits._ 


    val tweetsDF = rdd.toDF() 
    tweetsDF.write.mode("append").saveAsTable("tweet") 

} 

私は火花ストリーミングアプリを実行すると、それはgz.parquetとしてデータを格納しますHDFS内のファイル:/ユーザー/ハイブ/倉庫ディレクトリを次のように

[[email protected] /]# hdfs dfs -ls /user/hive/warehouse/tweets 
Found 469 items 
-rw-r--r-- 1 root supergroup   0 2016-03-30 08:36 /user/hive/warehouse/tweets/_SUCCESS 
-rw-r--r-- 1 root supergroup  241 2016-03-30 08:36 /user/hive/warehouse/tweets/_common_metadata 
-rw-r--r-- 1 root supergroup  35750 2016-03-30 08:36 /user/hive/warehouse/tweets/_metadata 
-rw-r--r-- 1 root supergroup  23518 2016-03-30 08:33 /user/hive/warehouse/tweets/part-r-00000-0133fcd1-f529-4dd1-9371-36bf5c3e5df3.gz.parquet 
-rw-r--r-- 1 root supergroup  9552 2016-03-30 08:33 /user/hive/warehouse/tweets/part-r-00000-02c44f98-bfc3-47e3-a8e7-62486a1a45e7.gz.parquet 
-rw-r--r-- 1 root supergroup  19228 2016-03-30 08:25 /user/hive/warehouse/tweets/part-r-00000-0321ce99-9d2b-4c52-82ab-a9ed5f7d5036.gz.parquet 
-rw-r--r-- 1 root supergroup  241 2016-03-30 08:25 /user/hive/warehouse/tweets/part-r-00000-03415df3-c719-4a3a-90c6-462c43cfef54.gz.parquet 

次のように_metadataファイルからスキーマは次のとおりです。

[[email protected] /]# parquet-tools meta hdfs://quickstart.cloudera:8020/user/hive/warehouse/tweets/_metadata 
creator:  parquet-mr version 1.5.0-cdh5.5.0 (build ${buildNumber}) 
extra:   org.apache.spark.sql.parquet.row.metadata = {"type":"struct","fields":[{"name":"tweet","type":"string","nullable":true,"metadata":{}}]} 

file schema: root 
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
tweet:   OPTIONAL BINARY O:UTF8 R:0 D:1 

私はスパークでのデータフレームにデータをロードする場合は、次のようにさらに、私はdf.show' `の出力を得る:

+--------------------+ 
|    tweet| 
+--------------------+ 
|��Objavro.sc...| 
|��Objavro.sc...| 
|��Objavro.sc...| 
|ڕObjavro.sch...| 
|��Objavro.sc...| 
|ֲObjavro.sch...| 
|��Objavro.sc...| 
|��Objavro.sc...| 
|֕Objavro.sch...| 
|��Objavro.sc...| 
|��Objavro.sc...| 
|��Objavro.sc...| 
|��Objavro.sc...| 
|��Objavro.sc...| 
|��Objavro.sc...| 
|��Objavro.sc...| 
|��Objavro.sc...| 
|��Objavro.sc...| 
|��Objavro.sc...| 
|��Objavro.sc...| 
+--------------------+ 
only showing top 20 rows 

を私はプレーンテキストとしてツイートを見たいのですがどのように今まで?

答えて

1

sqlContext.read.parquet( "/ユーザ/ハイブ/倉庫/ツイート")を示し