2017-08-13 2 views
1

パーティション付きのハイブテーブルを作成したい。SQLではなく、APIを使用してSparkからハイブテーブルを作成しますか?

テーブルのスキーマは次のとおりです。

val query = "CREATE TABLE some_new_table (name string, age integer) USING org.apache.spark.sql.parquet OPTIONS (path '<some_path>') PARTITIONED BY (age)" 

spark.sql(query) 

私は(スカラ座を使用して)スパークAPIをどうしようとすると、テーブルを:

val schema = StructType(StructField(name,StringType,true),StructField(age,IntegerType,true)) 

私が使用してスパーク-SQLでこれを行うことができますデータで満たされます。私は空のテーブルを作成し、パーティションを定義したいだけです。これは私がやっていることです。私は間違っています。

val df = spark.createDataFrame(sc.emptyRDD[Row], schema) 

val options = Map("path" -> "<some_path>", "partitionBy" -> "age") 

df.sqlContext().createExternalTable("some_new_table", "org.apache.spark.sql.parquet", schema, options); 

私はSpark-2.1.1を使用しています。

答えて

1

パーティション分割をスキップする場合。 saveAsTableで試すことができます。

spark.createDataFrame(sc.emptyRDD[Row], schema) 
    .write 
    .format("parquet") 
    //.partitionBy("age") 
    .saveAsTable("some_new_table") 

スパーク・パーティショニングとハイブ分割は互換性がありませんので、あなたはハイブからアクセスしたい場合は、SQLを使用する必要があります。https://issues.apache.org/jira/browse/SPARK-14927

関連する問題