我是Spark的新手,正在尝试一种方法来弄清楚如何在具有多种条件的RDD中使用过滤器并获取记录数。场景如下:
如果我想找出YEAR = 2018和TYPE =喜剧片有多少条记录。
我不需要使用DataSet / DataFrame的解决方案,而只需使用带有地图和过滤器的RDD。
任何帮助表示赞赏。
答案 0 :(得分:0)
您可以执行以下操作:
input=sc.textFile("<<path>>");
input_filtered=input.filter(lambda row : return (row.split(",")[3]=="comedy" and row.split(",")[5]=="2018") )
input_filetered.count()
另一种选择是将foreach与一个累加器一起使用。希望它会有所帮助。
答案 1 :(得分:0)
因此,如果您有RDD [Row]并且每一列都是StringType,那么
myRdd.filter(r => r.getAs("YEAR") == "2018" && r.getAs("TYPE") == "COMEDY")
这实际上取决于您如何读取数据。
这是您以RDD [Row]格式读取文件的方法。
val myRdd = spark.read.format("com.databricks.spark.csv").option("header","true").load("myFile.csv").rdd
答案 2 :(得分:0)
我不确定您的期望如下。
ilike_search_string = SearchHelpers.to_ilike_search_string("test data")
query = from p in Post,
where: ilike(p.content, ^ilike_search_string)
results = Repo.all(query)
输入文件
JavaRDD<String> lines = sc.textFile("readcsvyear.csv");
JavaRDD<String> filtered = lines.filter(line -> {
String[] list = line.split(",");
if(list.length >= 5 && list[4].equalsIgnoreCase("2018")) {
return true;
}
return false;
});
System.out.println(filtered);
for(String line:filtered.collect()){
System.out.println("filtered "+line);
}
输出
1,Date,desc,type,2018
2,Date,desc,type,2018
3,Date,desc,type,2018
4,Date,desc,type,2018
5,Date,desc,type,2018
6,Date,desc,type,2017
7,Date,desc,type,2017
8,Date,desc,type,2017