代码之家  ›  专栏  ›  技术社区  ›  blakiseskream

SparkYR我可以把格式和路径选项传递到SparkWrite表中吗?或者使用saveAsTable和spark write orc?

  •  2
  • blakiseskream  · 技术社区  · 6 年前

    假设我想写一个spark数据框, irisDf 兽人 保存到hive metastore

    在斯帕克我会这样做,

    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

      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")
    

    但我想知道是否有什么可以代替 格式 路径 选择进入 火花表 可保存 火花写作

    1 回复  |  直到 6 年前
        1
  •  4
  •   MichaelChirico    6 年前

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

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

    默认情况下,在Spark中,这将创建一个存储为 Parquet 路径 partition_by 参数)。

    到今天为止,还没有这样的格式选项,但是一个简单的解决方法是设置 spark.sessionState.conf.defaultDataSourceName 属性,在运行时

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

    或者在创建会话时。