2016-12-21 8 views
5

私はテーブルを読み取るために、次のコードを使用して、インパラからSparkSQLに移行しています:SparkSQL - 読むの寄木細工のファイルを直接

my_data = sqlContext.read.parquet('hdfs://my_hdfs_path/my_db.db/my_table') 

それが何かを返すことができますので、私は、上記のSparkSQLを起動するにはどうすればよい:

'select col_A, col_B from my_table' 

答えて

4

parquetファイルからDataframeを作成した後、それをsql queriesを実行する一時テーブルとして登録する必要があります。

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

val df = sqlContext.read.parquet("src/main/resources/peopleTwo.parquet") 

df.printSchema 

// after registering as a table you will be able to run sql queries 
df.registerTempTable("people") 

sqlContext.sql("select * from people").collect.foreach(println) 
+0

集める必要がありますか?いいですか?データが大きければ、ドライバにすべてを集めたくないからです。 – Edamame

+1

SQLの使い方の例です。それはあなたがそれをどのように使いたいかによって異なります。あなたはクエリを変更するか、ドライバで必要なデータを取得するために.take()を実行することもできます –

5

我々はは、テーブルを作成することなく、直接JSON、ORC、寄木細工とCSVなどのファイルにをSQLを実行することができます。

//This Spark 2.x code you can do the same on sqlContext as well 
val spark: SparkSession = SparkSession.builder.master("set_the_master").getOrCreate 

spark.sql("select col_A, col_B from parquet.`hdfs://my_hdfs_path/my_db.db/my_table`") 
    .show() 
+0

このエラーが表示されます "ファイルが見つかりません。 SQLで「REFRESH TABLE tableName」コマンドを実行するか、または関連するデータセット/ DataFrameを再作成してください。これをどうやって解決するのですか? – Passionate

+0

spark.sqlContext()を実行すると助けになりません。setConf( "spark.sql.parquet.cacheMetadata"、 "false"); – Passionate

+1

作品! 'hdfs:// my_hdfs_path/my_db.db/my_table'をあなたのファイルパスに置き換えてください。 :) – Cherry

関連する問題