我正在尝试将RDD保存为orc格式。
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格式。提前谢谢。
在持久存储区域(如HDFS)中持久化ORC格式仅适用于HiveContext。
作为一种替代方法(变通方法),您可以将其注册为临时表。类似这样的东西:-
DataFrame.write.mode("overwrite").orc("myDF.orc")
val orcDF = sqlCtx.read.orc("myDF.orc")
orcDF.registerTempTable("<Table Name>")
目前,保存为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)