我可以把格式和路径选项传递到spark\u write\u表中吗?或者将saveastable与spark\u write\u orc一起使用?

yv5phkfx  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(434)

带Hive的spark 2.0
假设我想写一个sparkDataframe, irisDf 将其保存到Hive元存储
在spark我会这样做,

irisDf.write.format("orc")
    .mode("overwrite")
    .option("path", "s3://my_bucket/iris/")
    .saveAsTable("my_database.iris")

sparklyr 我可以使用 spark_write_table 功能,

data("iris")
iris_spark <- copy_to(sc, iris, name = "iris")
output <- spark_write_table(
   iris
  ,name = 'my_database.iris'
  ,mode = 'overwrite'
)

但这不允许我设置 path 或者 format 我也可以用 spark_write_orc ```
spark_write_orc(
iris
, path = "s3://my_bucket/iris/"
, mode = "overwrite"
)

但它没有 `saveAsTable` 选项
现在,我可以用 `invoke` 复制spark代码的语句,

sdf <- spark_dataframe(iris_spark)
writer <- invoke(sdf, "write")
writer %>%
invoke('format', 'orc') %>%
invoke('mode', 'overwrite') %>%
invoke('option','path', "s3://my_bucket/iris/") %>%
invoke('saveAsTable',"my_database.iris")

但我想知道是否有什么办法来代替通过考试 `format` 以及 `path` 选项到 `spark_write_table` 或者 `saveAsTable` 期权转入 `spark_write_orc` ?
k97glaaz

k97glaaz1#

这个 spark.sessionState.conf.defaultDataSourceName 是在spark 2.2中引入的,可以在这里找到源代码。
在spark 2.1.1中,设置此选项(在连接前的配置或运行时中)对我有效:

spark_session_config(
  sc, "spark.sql.sources.default", "orc"
)
ifsvaxew

ifsvaxew2#

path 可以使用 options 参数,相当于 options 打电话给本地人 DataFrameWriter :

spark_write_table(
  iris_spark, name = 'my_database.iris', mode = 'overwrite', 
  options = list(path = "s3a://my_bucket/iris/")
)

默认情况下,在spark中,这将创建一个存储为parquet的表 path (分区子目录可以用 partition_by 参数)。
到目前为止,还没有这样的格式选项,但是一个简单的解决方法是设置 spark.sessionState.conf.defaultDataSourceName 属性,无论是在运行时

spark_session_config(
  sc, "spark.sessionState.conf.defaultDataSourceName", "orc"
)

或者在创建会话时。

相关问题