私はspark 1.6を使用しており、ハイブスクリプトで行うのと同じように外部ハイブテーブルを作成することを目指しています. これを行うには、最初にパーティション分割された avro ファイルを読み取り、このファイルのスキーマを取得します。ここで停止しましたが、このスキーマを作成中のテーブルに適用する方法がわかりません。スカラを使っています。みんな助けが必要です。
21037 次
3 に答える
2
外部テーブルのスキーマを自動的に推測する方法がわかりませんでした。そこで、文字列型のケースを作成しました。データ型の大文字と小文字を追加できます。しかし、列がいくつあるかわかりません。これはきれいなアプローチではないかもしれないので、お詫び申し上げます。
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.{Row, SaveMode};
import org.apache.spark.sql.types.{StructType,StructField,StringType};
val hiveContext = new org.apache.spark.sql.hive.HiveContext(sc)
val results = hiveContext.read.format("com.databricks.spark.avro").load("people.avro")
val schema = results.schema.map( x => x.name.concat(" ").concat( x.dataType.toString() match { case "StringType" => "STRING"} ) ).mkString(",")
val hive_sql = "CREATE EXTERNAL TABLE people_and_age (" + schema + ") ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '/user/ravi/people_age'"
hiveContext.sql(hive_sql)
results.saveAsTable("people_age",SaveMode.Overwrite)
hiveContext.sql("select * from people_age").show()
于 2016-07-27T18:49:55.347 に答える
-1
以下のコードを試してください。
val htctx= new HiveContext(sc)
htctx.sql(create extetnal table tablename schema partitioned by attribute row format serde serde.jar field terminated by value location path)
于 2016-07-27T18:50:00.410 に答える