我需要将 HIVE 表中的数据提取到 csv 文件中并在 RevoScaleR 中使用。目前我们从 HIVE 中提取数据并手动将其放入文件中并在 unix 文件系统中使用它进行临时分析,但是,要求是将结果直接重定向到 hdfs 位置并从那里使用 RevoScaleR?
我怎么做?或者我需要建立什么样的连接。
我需要将 HIVE 表中的数据提取到 csv 文件中并在 RevoScaleR 中使用。目前我们从 HIVE 中提取数据并手动将其放入文件中并在 unix 文件系统中使用它进行临时分析,但是,要求是将结果直接重定向到 hdfs 位置并从那里使用 RevoScaleR?
我怎么做?或者我需要建立什么样的连接。
如果我正确理解您的问题,您可以使用 RevoScaleR ODBC 连接导入 HIVE 表并从那里进行进一步分析。
以下是使用 Hortonworks 提供的 ODBC 驱动程序的示例:
OdbcConnString <- "DSN=Sample Hortonworks Hive DSN"
odbcDS <- RxOdbcData(sqlQuery = "SELECT * FROM airline",
connectionString=OdbcConnString,
stringsAsFactors=TRUE,
useFastRead = TRUE,
rowsPerRead=150000)
xdfFile <- "airlineHWS.xdf"
if(file.exists(xdfFile)) file.remove(xdfFile)
Flights<-rxImport(odbcDS, outFile=xdfFile,overwrite=TRUE)
rxGetInfo(data="airlineHWS.xdf", getVarInfo=TRUE,numRows = 10)
辰威的做法还可以,但问题只有一个。数据作为 odbcDS 对象中的数据帧临时存储在内存中。如果我们在蜂巢中有巨大的桌子,那么我们就完成了。
我建议通过在 hive 中使用外部表,然后在革命 r 中直接使用后端数据,将所有内容保存在磁盘上。
这些行中的一些东西:
从文本文件(csv、tab 等)格式的现有配置单元表创建外部表。
创建外部表 ext_table
喜欢 your_original_table_name
以“,”结尾的行格式分隔字段
位置'/你的/hdfs/位置';
在这里,我们正在创建以 csv 文件形式存储在 hdfs 中的外部表。
接下来使用插入覆盖命令将原始表复制到外部表。
插入覆盖表 ext_table select * from your_original_table_name
如果我们想检查 hdfs 类型的后端数据:
hadoop fs -ls /your/hdfs/location/
我们可以看到存储在该位置的零件文件。来吧,猫他们是双重肯定
现在我们可以使用 RxTextData 函数从上述步骤中读取数据
hive_data <- RxTextData(file='/your/hdfs/location/', delimiter = ',')
现在您可以使用 hive_data 作为 RxXdfData 中的 inFile 参数创建一个 xdf 文件,以便更有效地进行进一步处理,但最重要的是,数据从未触及内存。