sparklyr 我可以将格式和路径选项传递给 spark_write_table 吗?或将 saveAsTable 与 spark_write_orc 一起使用?
sparklyr can I pass format and path options into spark_write_table? or use saveAsTable with spark_write_orc?
带有 Hive 的 Spark 2.0
假设我正在尝试编写一个 spark 数据帧,irisDf
到 orc 并且 将它保存到 hive metastore
在 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
?
path
可以使用options
参数设置,相当于在原生DataFrameWriter
:
中调用options
spark_write_table(
iris_spark, name = 'my_database.iris', mode = 'overwrite',
options = list(path = "s3a://my_bucket/iris/")
)
默认情况下,在 Spark 中,这将创建一个 table,在 path
处存储为 Parquet(分区子目录可以使用 partition_by
参数指定)。
截至目前,还没有这样的格式选项,但一个简单的解决方法是在运行时设置 spark.sessionState.conf.defaultDataSourceName
属性
spark_session_config(
sc, "spark.sessionState.conf.defaultDataSourceName", "orc"
)
或者在您创建会话时。
spark.sessionState.conf.defaultDataSourceName
是在 Spark 2.2 中引入的,可以找到源代码 here。
在 Spark 2.1.1 中,设置此设置(在连接前的配置中或 运行 时间)对我有用:
spark_session_config(
sc, "spark.sql.sources.default", "orc"
)
带有 Hive 的 Spark 2.0
假设我正在尝试编写一个 spark 数据帧,irisDf
到 orc 并且 将它保存到 hive metastore
在 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
?
path
可以使用options
参数设置,相当于在原生DataFrameWriter
:
options
spark_write_table(
iris_spark, name = 'my_database.iris', mode = 'overwrite',
options = list(path = "s3a://my_bucket/iris/")
)
默认情况下,在 Spark 中,这将创建一个 table,在 path
处存储为 Parquet(分区子目录可以使用 partition_by
参数指定)。
截至目前,还没有这样的格式选项,但一个简单的解决方法是在运行时设置 spark.sessionState.conf.defaultDataSourceName
属性
spark_session_config(
sc, "spark.sessionState.conf.defaultDataSourceName", "orc"
)
或者在您创建会话时。
spark.sessionState.conf.defaultDataSourceName
是在 Spark 2.2 中引入的,可以找到源代码 here。
在 Spark 2.1.1 中,设置此设置(在连接前的配置中或 运行 时间)对我有用:
spark_session_config(
sc, "spark.sql.sources.default", "orc"
)