我正在尝试以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格式。 提前谢谢。
答案 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)