【问题标题】:Access hive using sparklyr package?使用 sparklyr 包访问 hive?
【发布时间】:2017-09-02 13:44:45
【问题描述】:
library(sparklyr)
library(dplyr)
home <- "/usr/hdp/current/spark-client"
sc <- spark_connect(master = "yarn-client", spark_home = home, version = "1.6.2")
readFromSpark <- spark_read_csv(sc, name="test", path ="hdfs://hostname/user/test.csv",header=TRUE)

我已经使用 sparklyr 成功访问了hdfs。但是如何使用sparklyr 访问配置单元表/命令,因为我需要将此df 存储到配置单元中。

【问题讨论】:

  • 试试这个:df_tbl &lt;- copy_to(sc, readFromSpark, "yourTableName")
  • @JaimeCaffarel 我不想把那个 df 作为 df_tbl。我想将 readFromSpark 保存到 hive 表中,我需要创建数据库表,然后我可以将 readFromSpark 放入 hive。

标签: r apache-spark hive sparklyr


【解决方案1】:

AFAIK,sparklyr 没有直接创建数据库/表的功能。但是您可以使用DBI 创建数据库/表。

library(DBI)
iris_preview <- dbExecute(sc, "CREATE EXTERNAL TABLE...")

【讨论】:

  • 很好,但是如何将已注册的 sdf 或已使用 tbl_cache 缓存的 sdf 放入 Hive 作为您在此处建议的 EXTERNAL TABLE?我没有看到使用 sparklyrdplyr 可以在内存中操作的本地对象创建表的任何说明。
【解决方案2】:

你可以试试 spark_write_table:

    spark_write_table(readFromSpark, 
    '<database_name>.readFromSpark', mode = 'overwrite')

如果您还要创建架构,则可以使用 DBI 包:

    dbSendQuery(sc,"CREATE SCHEMA IF NOT EXISTS xyz")
    tbl_change_db(sc,"xyz")

【讨论】:

    【解决方案3】:

    我是这样实现的:

    设置:

    cc <- RxSpark(nameNode = hdfs_host(myADL))
    rxSetComputeContext(cc)
    
    myXDFname <- 'something'
    hivTbl <- RxHiveData(table = myXDFname)
    
    sc <- spark_connect('yarn-client')
    
    tbl_cache(sc, myXDFname)
    mytbl <- tbl(sc, myXDFname)
    

    现在用它做点什么

    mytbl %>% head
    
    mytbl %>% 
       filter(rlike(<txt col>, pattern)) %>%
       group_by(something) %>%
       tally() %>%
       collect() %>% #this is important
       ggplot(., aes(...)) %>%
       geom_triforce(...)
    

    【讨论】:

      猜你喜欢
      • 2020-03-26
      • 2017-05-23
      • 1970-01-01
      • 2019-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-27
      • 2018-01-20
      相关资源
      最近更新 更多