一整天都在与这个问题搏斗:
我想访问 Hadoop 上的数据(通过 Hive)。并安装了 ODBC 包。
我能够与服务器建立连接:
con <- dbConnect(odbc:: odbc(), "hadoop")
我能够看到我想在 R 中获得的表格:
dblistTables(con, schema= "aacs")
输出是:
[1] "dev_1" "dev_2"
[3] "dev_3" "dev_4"
我想在我的 R 环境中有“dev_4”(在数据框中)。我试过:
db_orders <- tbl(con, "dev_4")
但是我收到一个错误:找不到表或 View 。下一行也没有任何结果。
db_orders <- tbl(con, "aacs.dev_4")
如何在我的 R 环境中获取该数据表?
编辑 1
试图运行接下来的两件事:
result <- dbSendQuery(con, "SELECT * FROM aacs.dev_4")
收到错误:设备上没有剩余空间。
好的,那么让我们减少查询:
result <- dbSendQuery(con, "SELECT * FROM aacs.dev_4 LIMIT 100")
但是,同样的错误:
Error: <SQL> 'SELECT * FROM aacs.dev_4 limit 100'
nanodbc/nanodbc.cpp:1587: HY000: [Hortonworks][Hardy] (35) Error from server: error code: '2' error message: 'Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.tez.TezTask. Vertex failed, vertexName=Reducer 2, vertexId=vertex_15177720341_0081_2_08, diagnostics=[Task failed, taskId=task_15177723341_0081_2_08_000146, diagnostics=[TaskAttempt 0 failed, info=[Error: FS Error in Child JVM:org.apache.hadoop.fs.FSError: java.io.IOException: No space left on device
at org.apache.hadoop.fs.RawLocalFileSystem$LocalFSFileOutputStream.write(RawLocalFileSystem.java:261)
at java.io.BufferedOutputStream.write(BufferedOutputStream.java:122)
at org.apache.hadoop.fs.FSDataOutputStream$PositionCache.write(FSDataOutputStream.java:58)
at java.io.DataOutputStream.write(DataOutputStream.java:107)
at org.apache.tez.runtime.library.common.sort.impl.IFileOutputStream.write(IFil
任何人都知道如何解决这个问题?奇怪的是没有剩余内存..因为我有很多空间(足以存储数据!)。
编辑 2
正如@Florian 建议的那样:
data <- dbReadTable(con, "aacs.dev_4")
导致了下一个错误:
Error: <SQL> 'SELECT * FROM `aacs.dev_4`'
nanodbc/nanodbc.cpp:1587: HY000: [Hortonworks][Hardy] (35) Error from server: error code: '2' error message: 'Error while processing statement: FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.tez.TezTask. Vertex failed, vertexName=Reducer 2, vertexId=vertex_1517772023341_0082_1_08, diagnostics=[Task failed, taskId=task_1517772023341_0082_1_08_000236, diagnostics=[TaskAttempt 0 failed, info=[Error: exceptionThrown=org.apache.tez.runtime.library.common.shuffle.orderedgrouped.Shuffle$ShuffleError: error in shuffle in fetcher {Map_4} #10
at org.apache.tez.runtime.library.common.shuffle.orderedgrouped.Shuffle$RunShuffleCallable.callInternal(Shuffle.java:360)
at org.apache.tez.runtime.library.common.shuffle.orderedgrouped.Shuffle$RunShuffleCallable.callInternal(Shuffle.java:337)
at org.apache.tez.common.CallableWithNdc.call(CallableWithNdc.java:36)
at java.util.concurrent.FutureTask.run(FutureTask.java
最佳答案
尝试
x <- dbReadTable(con, "dev_4")
完整的工作示例:
library(DBI)
library(RSQLite)
con <- dbConnect(RSQLite::SQLite(), ":memory:")
dbListTables(con)
dbWriteTable(con, "mtcars", mtcars)
x <- dbReadTable(con, "mtcars")
希望这可以帮助!
关于sql - ODBC 连接,在 R 中获取一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49071856/