将数据帧转换为spark scala中的hive表

时间:2016-05-23 13:57:51

标签: scala hadoop apache-spark dataframe hive

我正在尝试将数据帧转换为spark Scala中的hive表。我已从XML文件中读取数据框。它使用SQL上下文来执行此操作。我想将此数据帧保存为hive表。我收到了这个错误:

  

“WARN HiveContext $$ anon $ 1:无法以Hive兼容的方式持久存储database_1test_table。以Spark SQL特定格式将其持久化为Hive Metastore。”

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()

1 个答案:

答案 0 :(得分:4)

spark中的saveAsTable与hive不兼容。我在CDH 5.5.2。来自cloudera网站的解决方法:

SELECT a.id, a.amount, a.date FROM account a WHERE a.date IN (SELECT MAX(date) FROM account)

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