1

我需要将 HIVE 表中的数据提取到 csv 文件中并在 RevoScaleR 中使用。目前我们从 HIVE 中提取数据并手动将其放入文件中并在 unix 文件系统中使用它进行临时分析,但是,要求是将结果直接重定向到 hdfs 位置并从那里使用 RevoScaleR?

我怎么做?或者我需要建立什么样的连接。

4

2 回答 2

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)
于 2014-10-23T20:56:05.503 回答
0

辰威的做法还可以,但问题只有一个。数据作为 odbcDS 对象中的数据帧临时存储在内存中。如果我们在蜂巢中有巨大的桌子,那么我们就完成了。

我建议通过在 hive 中使用外部表,然后在革命 r 中直接使用后端数据,将所有内容保存在磁盘上。

这些行中的一些东西:

  1. 从文本文件(csv、tab 等)格式的现有配置单元表创建外部表。

    创建外部表 ext_table

    喜欢 your_original_table_name

    以“,”结尾的行格式分隔字段

    位置'/你的/hdfs/位置';

    在这里,我们正在创建以 csv 文件形式存储在 hdfs 中的外部表。

  2. 接下来使用插入覆盖命令将原始表复制到外部表。

    插入覆盖表 ext_table select * from your_original_table_name

    如果我们想检查 hdfs 类型的后端数据:

    hadoop fs -ls /your/hdfs/location/

    我们可以看到存储在该位置的零件文件。来吧,猫他们是双重肯定

  3. 现在我们可以使用 RxTextData 函数从上述步骤中读取数据

    hive_data <- RxTextData(file='/your/hdfs/location/', delimiter = ',')

    现在您可以使用 hive_data 作为 RxXdfData 中的 inFile 参数创建一个 xdf 文件,以便更有效地进行进一步处理,但最重要的是,数据从未触及内存。

于 2015-05-29T12:07:22.717 回答