我需要将HIVE表中的数据提取到csv文件中并在RevoScaleR中使用它。 目前我们从HIVE中提取数据并手动将其放入文件并在unix文件系统中使用以进行特殊分析,但是,要求是将结果直接重定向到hdfs位置并从那里使用RevoScaleR?
我该怎么做?或者我需要什么样的连接来建立这个。
答案 0 :(得分:1)
如果我理解您的问题是正确的,您可以使用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)
答案 1 :(得分:0)
陈伟的方法还可以,但只有一个问题。数据作为odbcDS对象中的数据帧临时存储在内存中。如果我们在蜂巢中有大桌子,那么我们就完成了。
我建议通过在hive中使用外部表,然后在革命r中直接使用后端数据来将所有内容保存在磁盘上。
这些内容:
以文本文件(csv,tab等)格式从现有的配置单元表创建外部表。
CREATE EXTERNAL TABLE ext_table
LIKE your_original_table_name
由','
终止的行格式删除字段LOCATION'/ your / hdfs / location';
这里我们创建外部表,它作为csv文件存储在hdfs中。
接下来,使用insert overwrite命令将原始表复制到外部表。
从your_original_table_name
插入覆盖表ext_table select *
如果我们想检查hdfs类型的后端数据:
hadoop fs -ls / your / hdfs / location /
我们可以看到存储在该位置的零件文件。来吧,让他们双重确定
现在我们可以使用RxTextData函数从上面的步骤中读取数据
hive_data&lt; - RxTextData(file ='/ your / hdfs / location /',delimiter =',')
现在你可以使用hive_data创建一个xdf文件作为RxXdfData中的inFile参数,以便更有效地进行进一步处理,但最重要的是数据从未触及过内存。