Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将函数应用于SparkR中的每一行?_R_Apache Spark_Sparkr_Bigdata - Fatal编程技术网

如何将函数应用于SparkR中的每一行?

如何将函数应用于SparkR中的每一行?,r,apache-spark,sparkr,bigdata,R,Apache Spark,Sparkr,Bigdata,我有一个CSV格式的文件,其中包含一个列为“id”、“timestamp”、“action”、“value”和“location”的表。 我想对表的每一行应用一个函数,我已经在R中编写了如下代码: user <- read.csv(file_path,sep = ";") num <- nrow(user) curLocation <- "1" for(i in 1:num) { row <- user[i,] if(user$action != "pow

我有一个CSV格式的文件,其中包含一个列为“id”、“timestamp”、“action”、“value”和“location”的表。 我想对表的每一行应用一个函数,我已经在R中编写了如下代码:

user <- read.csv(file_path,sep = ";")
num <- nrow(user)
curLocation <- "1"
for(i in 1:num) {
    row <- user[i,]
    if(user$action != "power")
        curLocation <- row$value
    user[i,"location"] <- curLocation
}
curLocation <- "1"
schema <- structType(structField("Sequence","integer"), structField("ID","integer"), structField("Timestamp","timestamp"), structField("Action","string"), structField("Value","string"), structField("Location","string"))
setLocation <- function(row, curLoc) {
    if(row$Action != "power|battery|level"){
        curLoc <- row$Value
    }
    row$Location <- curLoc
}
bw <- dapply(user, function(row) { setLocation(row, curLocation)}, schema)
head(bw)
userScorpion775

你应该分享你的sparkR代码。不要忘记,在R和sparkR中,数据的处理方式不同

发件人:


df您可以使用sparkyr(与dplyr相同的语法)@DimitriPetrenko如果我需要使用SparkR怎么办?SparkR能达到这个效果吗?我看了Dappy函数,发现它用于“将函数应用到SparkDataFrame的每个分区”。根据我的理解,分区的概念与行无关。我关心的是,我不知道如何编写应用于SparkDataFrame的函数。目前我只知道如何在R中实现我想要的功能,而不知道如何在SparkR中实现。你能给我一些建议吗?我不是spark专家,但我认为分区是数据被分割成分散在集群上的。你能试试上面的例子,告诉我它是否适合你的需要吗?谢谢你的建议。我试着按照你的指示做,但出现了问题中所示的错误。我编辑了我的帖子,尝试了一下,然后反馈:)我以前的错误是认为在dapply函数中我们有行。事实上,我们有一个数据帧。我相信spark将剪切数据帧,将每个部分发送到不同的节点并应用该功能(此处为changeLocation)。如果有人能确认的话?只要我使用dapplyCollect函数就行了。在这种情况下,我不需要指定模式。
changeLocation <- function(partitionnedDf) {
    nrows <- nrow(partitionnedDf)
    curLocation <- "1"
    for(i in 1:nrows){
        row <- partitionnedDf[i,]
        if(row$action != "power") {
            curLocation <- row$value
        }
    partitionnedDf[i,"location"] <- curLocation
    }
    partitionnedDf
}

bw <- dapplyCollect(user, changeLocation)
df <- read.df(csvPath, "csv", header = "true", inferSchema = "true", na.strings = "NA")
changeLocation <- function(partitionnedDf) {
    nrows <- nrow(partitionnedDf)
    curLocation <- as.integer(1)

    # Loop over each row of the partitionned data frame
    for(i in 1:nrows){
        row <- partitionnedDf[i,]

        if(row[1] != "power") {
            curLocation <- row[2]
        }
        partitionnedDf[i,3] <- curLocation
    }

    # Return modified data frame
    partitionnedDf
}

# Load data
df <- read.df("data.csv", "csv", header="false", inferSchema = "true")

head(collect(df))

# Define schema of dataframe
schema <- structType(structField("action", "string"), structField("value", "integer"),
                     structField("location", "integer"))

# Change location of each row                    
df2 <- dapply(df, changeLocation, schema)

head(df2)