以ORC格式保存spark rdd

时间:2015-11-27 11:26:39

标签: scala apache-spark parquet orc

我正在尝试以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.

我想避免使用配置单元来执行此操作,因为我的数据位于hdfs中,并且与任何配置单元表无关。有没有解决方法? 它适用于Parquet格式。 提前谢谢。

2 个答案:

答案 0 :(得分:2)

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

作为备用(解决方法),您可以将其注册为临时表。这样的事情: -

DataFrame.write.mode("overwrite").orc("myDF.orc")
val orcDF = sqlCtx.read.orc("myDF.orc")
orcDF.registerTempTable("<Table Name>")

答案 1 :(得分:1)

至于现在,只能使用HiveContext来保存为orc。

所以方法是这样的:

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)