【问题标题】:Convert dataframe to hive table in spark scala在 spark scala 中将数据框转换为配置单元表
【发布时间】:2016-09-20 10:53:15
【问题描述】:

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

“警告 HiveContext$$anon$1:无法以 Hive 兼容的方式持久化 database_1.test_table。以 Spark SQL 特定格式将其持久化到 Hive 元存储中。”

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

【问题讨论】:

  • 您面临的问题是什么? saveAsTable 不适合你?
  • 所以你创建了一个HiveContext,这是一个好的开始。 只要使用它! df = hiveContext.read....
  • 好的,我添加了上下文。但是我收到此错误:WARN HiveContext$$anon$1: Could not persist database_1.test_table in a Hive compatible way。以 Spark SQL 特定格式将其持久化到 Hive 元存储中。

标签: scala hadoop apache-spark dataframe hive


【解决方案1】:

spark 中的 saveAsTable 与 hive 不兼容。我在 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

【讨论】:

  • 使用 spark 1.6.1 和 hive 1.2.1,saveAsTable 对我来说很好。
猜你喜欢
  • 2017-06-11
  • 1970-01-01
  • 2020-08-12
  • 2020-04-04
  • 2018-12-05
  • 1970-01-01
  • 1970-01-01
  • 2018-04-14
  • 1970-01-01
相关资源
最近更新 更多