загрузка фрейма данных SparkR в Hive

Мне нужно загрузить DataFrame, созданный в SparkR, для загрузки в Hive.

#created a dataframe df_test
df_test <- createDataFrame(sqlContext, data.frame(mon = c(1,2,3,4,5), year = c(2011,2012,2013,2014,2015)))

#initialized the Hive context
>sc <- sparkR.init()
>hiveContext <- sparkRHive.init(sc)

#used the saveAsTable fn to save dataframe "df_test" in hive table named "table_hive"
>saveAsTable(df_test, "table_hive")

08.16.24 23:08:36 ОШИБКА RBackendHandler: saveAsTable на 13 не удалось Ошибка в invokeJava(isStatic = FALSE, objId$id, methodName, ...): java.lang.RuntimeException: Таблицы, созданные с помощью SQLContext, должны быть ВРЕМЕННЫМИ. Вместо этого используйте HiveContext. в scala.sys.package$.error(package.scala:27) в org.apache.spark.sql.execution.SparkStrategies$DDLStrategy$.apply(SparkStrategies.scala:392) в org.apache.spark.sql.catalyst .planning.QueryPlanner$$anonfun$1.apply(QueryPlanner.scala:58) в org.apache.spark.sql.catalyst.planning.QueryPlanner$$anonfun$1.apply(QueryPlanner.scala:58) в scala.collection.Iterator $$anon$13.hasNext(Iterator.scala:371) в org.apache.spark.sql.catalyst.planning.QueryPlanner.plan(QueryPlanner.scala:59) в org.apache.spark.sql.execution.QueryExecution.sparkPlan $lzycompute(QueryExecution.scala:47) в org.apache.spark.sql.execution.QueryExecution.sparkPlan(QueryExecution.scala:45) в org.apache.spark.sql.execution.QueryExecution.executedPlan$lzycompute(QueryExecution.scala) :52) в org.apache.spark.sql.execution.QueryExecution.executedPlan(QueryExecution.scala:52) в org.apache.s парк.sql.выполнение

Выдает вышеуказанную ошибку. Пожалуйста, помогите.


person Arun Gunalan    schedule 24.08.2016    source источник


Ответы (1)


Наличие HiveContext в области видимости недостаточно. Каждый фрейм данных привязан к определенному экземпляру SQLContext/SparkSession, а df_test явно создается с другим контекстом, чем hiveContext.

Давайте проиллюстрируем это на примере:

 Welcome to
    ____              __ 
   / __/__  ___ _____/ /__ 
  _\ \/ _ \/ _ `/ __/  '_/ 
 /___/ .__/\_,_/_/ /_/\_\   version  1.6.1 
    /_/ 


 Spark context is available as sc, SQL context is available as sqlContext
> library(magrittr)
> createDataFrame(sqlContext, mtcars) %>% saveAsTable("foo")
16/08/24 20:22:13 ERROR RBackendHandler: saveAsTable on 22 failed
Error in invokeJava(isStatic = FALSE, objId$id, methodName, ...) : 
  java.lang.RuntimeException: Tables created with SQLContext must be TEMPORARY. Use a HiveContext instead.
    at scala.sys.package$.error(package.scala:27)
    at org.apache.spark.sql.execution.SparkStrategies$DDLStrategy$.apply(SparkStrategies.scala:392)
    at org.apache.spark.sql.catalyst.planning.QueryPlanner$$anonfun$1.apply(QueryPlanner.scala:58)
    at org.apache.spark.sql.catalyst.planning.QueryPlanner$$anonfun$1.apply(QueryPlanner.scala:58)
    at scala.collection.Iterator$$anon$12.hasNext(Iterator.scala:396)
    at org.apache.spark.sql.catalyst.planning.QueryPlanner.plan(QueryPlanner.scala:59)
    at org.apache.spark.sql.execution.QueryExecution.sparkPlan$lzycompute(QueryExecution.scala:47)
    at org.apache.spark.sql.execution.QueryExecution.sparkPlan(QueryExecution.scala:45)
    at org.apache.spark.sql.execution.QueryExecution.executedPlan$lzycompute(QueryExecution.scala:52)
    at org.apache.spark.sql.execution.QueryExecution.executedPlan(QueryExecution.scala:52)
    at org.apache.spark.sql.execu
>
> hiveContext <- sparkRHive.init(sc)
> createDataFrame(hiveContext, mtcars) %>% saveAsTable("foo")
NULL
person zero323    schedule 24.08.2016