我使用spark 1.6,我的目標是創建外部配置單元表,就像我在hive腳本中所做的一樣。爲此,我首先閱讀分區的avro文件並獲取此文件的架構。現在我停在這裏,我不知道如何將這個模式應用到我的創建表中。我使用scala。需要幫助的人。使用spark創建配置單元外部表格
2
A
回答
3
最後,我用老式的方式做我自己。隨着下面的代碼幫助:
val rawSchema = sqlContext.read.avro("Path").schema
val schemaString = rawSchema.fields.map(field => field.name.replaceAll("""^_""", "").concat(" ").concat(field.dataType.typeName match {
case "integer" => "int"
case smt => smt
})).mkString(",\n")
val ddl =
s"""
|Create external table $tablename ($schemaString) \n
|partitioned by (y int, m int, d int, hh int, mm int) \n
|Stored As Avro \n
|-- inputformat 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat' \n
| -- outputformat 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat' \n
| Location 'hdfs://$path'
""".stripMargin
照顧沒有列名可以與_
開始,蜂巢無法解析integer
。我想說,這種方式不靈活,但工作。如果任何人得到更好的主意,PLZ評論。
1
我沒有看到一種方法來自動推斷外部表的模式。所以我創建了字符串類型的例子。您可以爲您的數據類型添加大小寫。但我不確定你有多少列。我很抱歉,因爲這可能不是一個乾淨的方法。
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()
-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)
+0
你能說更多關於哪一個是可變的,Thx –
相關問題
- 1. 配置單元 - 從現有表創建外部表
- 2. 創建外部表格配置單元,位置包含多個文件
- 3. 在Qubole中,使用S3位置創建配置單元外部表
- 4. 來自Apache Spark的外部配置單元中的查詢表格
- 5. 使用spark hivecontext閱讀外部配置單元分區表的問題
- 6. 如何使用json對象數組創建外部配置單元表
- 7. 在配置單元中使用JSON罐創建外部表時出錯13.0
- 8. 配置單元的Spark SQL構建?
- 9. 爲什麼配置單元不允許用CTAS創建外部表?
- 10. 創建指向HBase表的外部配置單表
- 11. 配置表格單元格
- 12. 使用「hive -e」創建配置單元表但在配置單元外殼中獲取錯誤
- 13. Spark SQLContext未找到配置單元表
- 14. 無法創建配置單元表
- 15. Apache配置單元創建表
- 16. 創建配置單元UDF
- 17. 使用其他表格中的選擇創建外部表格
- 18. 如何在配置單元中創建表格的空副本
- 19. 使用文本文件中的列創建配置單元表
- 20. 使用特殊字符從txt創建表配置單元
- 21. 如何使用指向hbase表的複雜數據類型創建外部配置單元表?
- 22. 是否可以使用文本輸出格式創建配置單元表?
- 23. 表和單元格創建
- 24. 使用Spark配置單元在Hive中使用Spark配置單元格上下文格式的日期應該是YYYYMMDD(dt_skey)
- 25. 使用兩個配置單元表中的值創建一個新的配置單元表
- 26. hive內部配置單元表與外部配置單元表之間的區別
- 27. 配置單元:無位置的外部分區表
- 28. 配置單元從動態位置加載外部表(分區)
- 29. 創建鏈接表單外部列表
- 30. 使用Spark從Oracle到配置單元的Tranfser數據使用Spark
hx爲您提供幫助。但是這樣桌子就不會是分區的桌子了。任何想法? –