2016-05-23 12 views
1

spala Scalaでデータフレームをハイブテーブルに変換しようとしています。 XMLファイルからデータフレームを読みました。これは、SQLコンテキストを使用して行います。このデータフレームをハイブテーブルとして保存するように変換したい。私はこのエラーを取得しています:スパークでspark scalaでdataframeをハイブテーブルに変換する

"WARN HiveContext$$anon$1: Could not persist database_1 . test_table in a Hive compatible way. Persisting it into Hive metastore in Spark SQL specific format."

object spark_conversion { 
def main(args: Array[String]): Unit = { 

if (args.length < 2) { 
    System.err.println("Usage: <input file> <output dir>") 
    System.exit(1) 
} 
val in_path = args(0) 
val out_path_csv = args(1) 
val conf = new SparkConf() 
     .setMaster("local[2]") 
     .setAppName("conversion") 
val sc = new SparkContext(conf) 

val hiveContext = new HiveContext(sc) 

val df = hiveContext.read 
    .format("com.databricks.spark.xml") 
    .option("rowTag", "PolicyPeriod") 
    .option("attributePrefix", "attr_") 
    .load(in_path) 

df.write 
    .format("com.databricks.spark.csv") 
    .option("header", "true") 
    .save(out_path_csv) 

df.saveAsTable("database_1.test_table") 

df.printSchema() 
df.show() 
+0

あなたが直面している問題は何ですか? saveAsTableはあなたのために働いていませんでしたか? – Shashi

+0

'HiveContext'を作成すると良いスタートです。 **そのまま使用してください!** 'df = hiveContext.read ....' –

+0

これでコンテキストを追加しました。しかし、私はこのエラーが発生しています:WARN HiveContext $$ anon $ 1: 'database_1'.'test_table'をHive互換の方法で保持できませんでした。 Spark SQL固有のフォーマットでHiveメタストアに永続化します。 – Defcon

答えて

1

saveAsTableはハイブと互換性がありません。私はCDH 5.5.2です。 Clouderaのウェブサイトからの回避策:

df.registerTempTable(tempName) 
hsc.sql(s""" 
CREATE TABLE $tableName (  
// field definitions ) 
STORED AS $format """) 
hsc.sql(s"INSERT INTO TABLE $tableName SELECT * FROM $tempName") 

http://www.cloudera.com/documentation/enterprise/release-notes/topics/cdh_rn_spark_ki.html

+0

spark 1.6.1とハイブ1.2.1では、saveAsTableがうまく動作します。 –

関連する問題