2

我正在尝试以 orc 格式保存我的 RDD。

  val data: RDD[MyObject] = createMyData()
  val sqlContext = new SQLContext(sc)
  import sqlContext.implicits._
  data.toDF.write.format("orc").save(outputPath)

它编译得很好,但它不起作用。我得到以下异常:

 ERROR ApplicationMaster: User class threw exception: java.lang.AssertionError: assertion failed: The ORC data source can only be used with HiveContext.
 java.lang.AssertionError: assertion failed: The ORC data source can only be used with HiveContext.

我想避免使用 hive 来执行此操作,因为我的数据在 hdfs 中,并且与任何 hive 表都不相关。有什么解决方法吗?它适用于 Parquet 格式。提前致谢。

4

2 回答 2

2

在持久化存储区域(如 HDFS)中持久化 ORC 格式仅适用于 HiveContext。

作为替代(解决方法),您可以将其注册为临时表。像这样的东西: -

DataFrame.write.mode("overwrite").orc("myDF.orc")
val orcDF = sqlCtx.read.orc("myDF.orc")
orcDF.registerTempTable("<Table Name>")
于 2015-11-29T01:24:12.200 回答
1

就目前而言,保存为 orc 只能通过 HiveContext 来完成。

所以方法是这样的:

import sqlContext.implicits._ 
val data: RDD[MyObject] = createMyData()
val sqlContext = new New Org.Apache.Spark.Sql.Hive.HiveContext(Sc)   
data.toDF.write.format("orc").save(outputPath)
于 2016-04-27T14:34:03.133 回答