我在R中创建了1:10000数据。使用SparkR,我用1:10000数据创建了RDD。我想过滤,以便打印出数据< 10使用SparkR。我正在学习SparkR,我将不胜感激任何帮助。在将其标记为重复之前,请仔细阅读该问题。我还为那些喜欢在最后使用数据框的人提供了代码。
library(SparkR)
sc <- sparkR.init(master = "local")
sqlContext <- sparkRSQL.init(sc)
Data <- c(1:10000)
distData <- SparkR:::parallelize(sc,Data)
我想打印出所有数据&lt; 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)
答案 0 :(得分:0)
SparkR命令仅适用于Spark DataFrames,而只有一列的Spark DataFrames不是列表。您的filter()语法似乎假设您正在处理列表,而distData是一列DataFrame。您必须在出现错误的示例中的filter()命令中指定列名。运行str(distData)
检查您的列名称。然后使用distData$colName < 10
this question的答案中提供了如何使用subset(),sql和filter()函数过滤Spark DataFrame的示例。 @ zero323回答了描述过滤函数的工作语法的问题。