sparkR 过滤不在数据框中的数据
sparkR to filter data that is not in a data frame
我在 R 中创建了一个 1:10000 数据。使用 SparkR,我用 1:10000 数据创建了 RDD。我想过滤以便使用 SparkR 打印出 < 10 的数据。我正在学习 SparkR,如果有任何帮助,我将不胜感激。在将问题标记为重复之前,请仔细阅读问题。我还为那些喜欢在最后使用数据框的人提供了代码。
library(SparkR)
sc <- sparkR.init(master = "local")
sqlContext <- sparkRSQL.init(sc)
Data <- c(1:10000)
distData <- SparkR:::parallelize(sc,Data)
我要打印出所有<10的数据。我尝试了以下方法来获得答案。不幸的是,我得到了相应的错误。问题不在于并行化功能。我遇到了过滤器和收集功能的问题。请参阅我 运行 的不同试验和相关的错误以获取详细信息。
SparkR:::filter(distData[distData < 10])
Error: Error in SparkR:::filter(distData[distData < 10]) :
error in evaluating the argument 'x' in selecting a method for function 'filter': Error in distData[distData < 10] :
error in evaluating the argument 'i' in selecting a method for function '[': Error in distData < 10 :
comparison (3) is possible only for atomic and list types
SparkR:::filter(sc,distData[distData < 10])
Error in SparkR:::filter(sc, distData[distData < 10]) :
error in evaluating the argument 'condition' in selecting a method for function 'filter': Error in distData[distData < 10] :
error in evaluating the argument 'i' in selecting a method for function '[': Error in distData < 10 :
comparison (3) is possible only for atomic and list types
SparkR:::collect(distData,filter(distData[distData<10]))
Error in filter(distData[distData < 10]) :
error in evaluating the argument 'x' in selecting a method for function 'filter': Error in distData[distData < 10] :
error in evaluating the argument 'i' in selecting a method for function '[': Error in distData < 10 :
comparison (3) is possible only for atomic and list types
SparkR:::collect(distData, function(dist){
print(dist[dist<10])
})
Error in if (flatten) { : argument is not interpretable as logical
filter(distData, function(dist){
print(dist[dist<10])
})
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘filter’ for signature ‘"RDD", "function"’
如果我使用数据框,下面是有效的代码
df <- SparkR:::createDataFrame(sqlContext,distData)
colnames(df)<-c("random")
df1<-subset(df, nana$random<10)
SparkR:::collect(df1)
SparkR命令只对Spark DataFrames起作用,只有一列的Spark DataFrames不是列表。您的 filter() 语法似乎假设您正在处理列表,而 distData 是单列 DataFrame。您必须在有错误的示例中的 filter() 命令中指定列名称。通过 运行 str(distData)
检查您的列名称。然后使用 distData$colName < 10
应用您的 filter()
上的答案中提供了有关如何使用 subset()、sql 和 filter() 函数过滤 Spark DataFrame 的示例。 @zero323 回答了描述过滤函数工作语法的问题。
我在 R 中创建了一个 1:10000 数据。使用 SparkR,我用 1:10000 数据创建了 RDD。我想过滤以便使用 SparkR 打印出 < 10 的数据。我正在学习 SparkR,如果有任何帮助,我将不胜感激。在将问题标记为重复之前,请仔细阅读问题。我还为那些喜欢在最后使用数据框的人提供了代码。
library(SparkR)
sc <- sparkR.init(master = "local")
sqlContext <- sparkRSQL.init(sc)
Data <- c(1:10000)
distData <- SparkR:::parallelize(sc,Data)
我要打印出所有<10的数据。我尝试了以下方法来获得答案。不幸的是,我得到了相应的错误。问题不在于并行化功能。我遇到了过滤器和收集功能的问题。请参阅我 运行 的不同试验和相关的错误以获取详细信息。
SparkR:::filter(distData[distData < 10])
Error: Error in SparkR:::filter(distData[distData < 10]) :
error in evaluating the argument 'x' in selecting a method for function 'filter': Error in distData[distData < 10] :
error in evaluating the argument 'i' in selecting a method for function '[': Error in distData < 10 :
comparison (3) is possible only for atomic and list types
SparkR:::filter(sc,distData[distData < 10])
Error in SparkR:::filter(sc, distData[distData < 10]) :
error in evaluating the argument 'condition' in selecting a method for function 'filter': Error in distData[distData < 10] :
error in evaluating the argument 'i' in selecting a method for function '[': Error in distData < 10 :
comparison (3) is possible only for atomic and list types
SparkR:::collect(distData,filter(distData[distData<10]))
Error in filter(distData[distData < 10]) :
error in evaluating the argument 'x' in selecting a method for function 'filter': Error in distData[distData < 10] :
error in evaluating the argument 'i' in selecting a method for function '[': Error in distData < 10 :
comparison (3) is possible only for atomic and list types
SparkR:::collect(distData, function(dist){
print(dist[dist<10])
})
Error in if (flatten) { : argument is not interpretable as logical
filter(distData, function(dist){
print(dist[dist<10])
})
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘filter’ for signature ‘"RDD", "function"’
如果我使用数据框,下面是有效的代码
df <- SparkR:::createDataFrame(sqlContext,distData)
colnames(df)<-c("random")
df1<-subset(df, nana$random<10)
SparkR:::collect(df1)
SparkR命令只对Spark DataFrames起作用,只有一列的Spark DataFrames不是列表。您的 filter() 语法似乎假设您正在处理列表,而 distData 是单列 DataFrame。您必须在有错误的示例中的 filter() 命令中指定列名称。通过 运行 str(distData)
检查您的列名称。然后使用 distData$colName < 10