从 .Xdf 文件中删除重复记录

Posted

技术标签:

【中文标题】从 .Xdf 文件中删除重复记录【英文标题】:Removing duplicate records from .Xdf file 【发布时间】:2015-06-19 12:24:18 【问题描述】:

我想从我的大型 .xdf 文件 trans.xdf 中删除重复记录。 这是文件详细信息:

File name: /poc/revor/data/trans.xdf
Number of observations: 1000000000
Number of variables: 5
Number of blocks: 40
Compression type: zlib
Variable information:
Var 1: CARD_ID, Type: character
Var 2: SE_NO, Type: character
Var 3: r12m_cv, Type: numeric, Low/High: (-2348.7600, 40587.3900)
Var 4: r12m_roc, Type: numeric, Low/High: (0.0000, 231.0000)
Var 5: PROD_GRP_CD, Type: character

以下是该文件的示例数据:

CARD_ID SE_NO   r12m_cv r12m_roc    PROD_GRP_CD
900000999000000000          1045815024  110 1   1
900000999000000000          1052487253  247.52  2   1
900000999000000000          9999999999  38.72   1   1
900000999000000000          1090389768  1679.96 16  1
900000999000000000          1091226035  0   1   1
900000999000000000          1091241208  538.68  4   1
900000999000000000          9999999999  83  1   1
900000999000000000          1091468041  148.4   3   1
900000999000000000          1092640358  3.13    1   1
900000999000000000          1093468692  546.29  1   1

我尝试使用 rxDataStep 函数来使用它的 transform 参数在 .xdf 文件上调用 unique() 函数。以下是相同的代码:

uniq_dat <- function( dataList )

    datalist <- unique(datalist)
    return(datalist)


rxDataStepXdf(inFile = "/poc/revor/data/trans.xdf",outFile = "/poc/revor/data/trans.xdf",transformFunc = uniq_dat,overwrite = TRUE) 

但出现以下错误:

Error in unique(datalist) : object 'datalist' not found

Error in transformation function: Error in unique(datalist) : object 'datalist' not found

Error in rxCall("RxDataStep", params) :

所以任何人都可以指出我在这里所做的错误,或者是否有更好的方法可以。我避免将数据加载到内存数据帧中,因为数据非常庞大。

我正在通过 HDFS 在 Revolution R Environment 中运行上述代码。

如果可以通过任何其他方法获得相同的结果,那么同样的示例将不胜感激。

提前感谢您的帮助:)

干杯,

阿米特

【问题讨论】:

你试过复制吗? ***.com/questions/12495345/… @Robert:仍然出现同样的错误 :( ......即:.rxTransformFunc(.rxTransformsImpliedFunc(..revoTransDf)) 中的错误:找不到对象'datalist' 转换函数中的错误: .rxTransformFunc(.rxTransformsImpliedFunc(..revoTransDf)) 中的错误:在 rxCall("RxDataStep", params) 中找不到对象 'datalist' 错误 一个问题是你有一个dataList 的参数,但是在你的函数中你使用了一个名为datalist 的变量。先解决这个问题,然后我们可以继续测试。 【参考方案1】:

您可以删除为 rxSort() 函数提供 removeDupKeys=TRUE 参数的重复值。例如你的情况:

XdfFilePath <- file.path("<your file's fully qualified path>/trans.xdf")
rxSort(inData = XdfFilePath,sortByVars=c("CARD_ID","SE_NO","r12m_cv","r12m_roc","PROD_GRP_CD"), removeDupKeys=TRUE) 

如果要根据特定键列删除重复记录,例如基于 SE_NO 列 将键值设置为 sortByVars="SE_NO"

【讨论】:

以上是关于从 .Xdf 文件中删除重复记录的主要内容,如果未能解决你的问题,请参考以下文章

如何记录客户信息[重复]

如何从表中删除重复记录? [复制]

MongoDB:从 Projection 中删除重复记录

从存储库历史记录中删除提交 [重复]

从历史记录中删除单个提交[重复]

从 Advantage Database Server 10.1 表中删除重复行