Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala Spark 1.6:将数据帧保存到配置单元时出现异常_Scala_Apache Spark_Hive - Fatal编程技术网

Scala Spark 1.6:将数据帧保存到配置单元时出现异常

Scala Spark 1.6:将数据帧保存到配置单元时出现异常,scala,apache-spark,hive,Scala,Apache Spark,Hive,我有一个从配置单元表加载的数据帧。添加一些数据后,我想将其写回配置单元,但出现以下异常: Exception in thread "main" java.lang.RuntimeException: [1.5] failure: ``.'' expected but `:' found 下面是我代码的一部分: var _resultsDF: DataFrame = _hiveContext.read.format("orc").load (_masterHDFS + "/apps/hive/w

我有一个从配置单元表加载的数据帧。添加一些数据后,我想将其写回配置单元,但出现以下异常:

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
}

saveAsTable似乎只允许将表标识符作为参数,因此必须为基本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")

我不太清楚。但是,请尝试更改正在写入和读取的表的名称。因为名为“mytable”的表已经存在,您以前读过,现在又用相同的名称编写。您是否尝试使用
SaveMode.Append
,删除并集并只保存新的
rowDF
记录
rowDF.write.format(“orc”).mode(SaveMode.Append).saveAsTable(…)
。您是否验证了这两个模式(mytable和“string”)是相同的?