【问题标题】:Spark 1.6: Exception when saving DataFrame into HiveSpark 1.6:将 DataFrame 保存到 Hive 时出现异常
【发布时间】:2017-03-22 17:25:04
【问题描述】:

我有一个从配置单元表加载的 DataFrame。添加一些数据后,我想将其写回配置单元,但得到这个异常:

Exception in thread "main" java.lang.RuntimeException: [1.5] failure: ``.'' expected but `:' found

这是我的部分代码:

var _resultsDF: DataFrame = _hiveContext.read.format("orc").load (_masterHDFS + "/apps/hive/warehouse/mytable");

def getValueList(): List[Any] = {
  List(
    "entry field1"
    "entry field2"
  )
}

def addRow(): Unit = {
  val rdd     = _sparkContext.parallelize (Seq (getValueList()))
  val rowRdd  = rdd.map (value => Row ((value: _*)))
  val rowDF   = _sqlContext.createDataFrame (rowRdd, _resultsDF.schema)

  // put DataFrame to results
  _resultsDF = _resultsDF.unionAll (rowDF)

  _resultsDF.write.format("orc").saveAsTable (_masterHDFS + "/apps/hive/warehouse/mytable")

  // => Exception in thread "main" java.lang.RuntimeException: [1.5] failure: ``.'' expected but `:' found
}

【问题讨论】:

  • 我不太清楚。但是请尝试更改您正在编写和阅读的表的名称。因为“mytable”命名的表已经存在,你之前读过的,你用相同的名字写过。
  • 您是否尝试过使用SaveMode.Append,删除联合并仅保存新的rowDF 记录? rowDF.write.format("orc").mode(SaveMode.Append).saveAsTable(...)。您是否验证了两个模式(mytable 和“字符串”)是相同的?

标签: scala apache-spark hive


【解决方案1】:

saveAsTable 似乎只允许表标识符作为参数,因此必须为 base-uri 设置选项。这对我有用:

var options: Map[String, String] = Map()
options += ("path" -> (_masterHDFS + "/apps/hive/warehouse/"))
_resultsDF.write.format("orc").mode(SaveMode.Append).options(options).saveAsTable("mytable")

或者你只是使用 save 而不是 saveAsTable

_resultsDF.write.format("orc").mode(SaveMode.Append).save(_masterHDFS + "/apps/hive/warehouse/mytable")

【讨论】:

    猜你喜欢
    • 2018-01-09
    • 2017-09-12
    • 1970-01-01
    • 2018-08-13
    • 2012-07-28
    • 2017-02-27
    • 2015-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多