如何将Spark-RDD从groupByKey转换为R-DataFram

2024-04-29 10:54:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用Spark pipe()函数将按键分组的数据行(使用groupByKey)传递给一个R脚本,该脚本对数据运行分层模型并输出数据字符串。你知道吗

然而,分组的sparkrdd有很多填充结构,我必须进行大量的解析才能将其放入一个R数据帧中。你知道吗

这是一个Spark代码,它将我以前的数据转换成管道中的内容():

.map(lambda p: (p.split(",")[0], ",".join(p.split(",")[1:len(p.split(","))])+"EOL" )) \
    .groupByKey().mapValues(list) \

下面是火花结构穿过管道的样子()

(u'1-10-13-8', [u'83845,"srd",-79.6376432430279,38.6874999965503,0.82,0,2013,NA,7,1,1,1,1174.88703492269,4,0,0,0,0,94.4444444444444,0,0,0,0,0,0,5.55555555555556,0,0,NAEOL', u'83845,"srd",-79.6376432430279,38.6874999965503,0.84,0,2013,NA,7,1,1,1,1174.88703492269,4,0,0,0,0,94.4444444444444,0,0,0,0,0,0,5.55555555555556,0,0,NAEOL', u'73437,"srd",-75.5229630639942,39.8124999964486,0.84,0,2013,NA,7,1,1,1,107.637711535396,8,0,0,0,0,0,0,0,0,11.1111111111111,0,0,8.33333333333333,80.5555555555556,0,NAEOL'])

在R中,我想将键解析为一个值,将其余的行解析为一个数据帧。我的Spark代码和R代码都有一些难看的模子(例如,使用EOL替换)使它成形。你知道吗

下面是R代码,用于解析R脚本中的Spark结构。你知道吗

 cbpos <- gregexpr(pattern='(\\[)', currentLine)
 currentText <- substr(currentLine, cbpos[[1]][1]+1, nchar(currentLine)-2)
 currentK <- substr(currentLine, 2, cbpos[[1]][1]-3)
 currentKclean <- substr(currentK, 3, nchar(currentK)-1)

 currentTextRead <- gsub("u'", "", currentText)
 currentTextRead <- gsub("'", "", currentTextRead)
 currentTextRead <- gsub("EOL, ", "\n", currentTextRead)
 currentTextRead <- gsub("EOL", "", currentTextRead)

 con <- textConnection(currentTextRead)
 currentValue <- read.csv(con, header=FALSE)
 close(con)

有没有更有效的方法让分组的数据更自然地进入R?你知道吗

使用SparkDataFrame会更容易吗?或者有没有更简单的方法让R通过键引用Spark数据结构?你知道吗


Tags: 数据代码脚本结构sparksplitnasrd