我正在做一个练习,要求我对一个有1300多万行的文件进行一些“过滤”,下面是一个示例:
18;03;2015;082XX S MOZART ST;THEFT;$500 AND UNDER;STREET;41.743803922;-87.693687357
19;03;2015;052XX S CORNELL AVE;ROBBERY;ARMED: HANDGUN;RESIDENCE PORCH/HALLWAY;41.80061868;-87.585887262
19;03;2015;020XX N PULASKI RD;CRIMINAL DAMAGE;TO VEHICLE;STREET;41.918320523;-87.726596048
18;03;2015;001XX W RANDOLPH ST;ASSAULT;SIMPLE;RESIDENCE;41.884472382;-87.633378182
我要问的问题是:
-犯罪率最高的一天-平均犯罪率最高的月份-犯罪率逐年上升?
我想知道如何打印/过滤最高和最新版本。。。我将在这里插入我的代码(在这里我已经插入了我的其他问题):
Public class Main {
public static void main (String [] args) {
System.out.println("Start");
SparkConf conf = new SparkConf().setMaster("local[*]").setAppName("Pratic Spark");
JavaSparkContext sc = new JavaSparkContext(conf);
JavaRDD<String> arquivo = sc.textFile("hdfs://localhost/Frameworks/spark/ocorrencias_criminais.csv");
/* --- EXERCÍCIO 1 ---- Filters colun nº 2 from dataset - YEAR ----*/
JavaRDD<String> YearRDD = arquivo.map(s ->
{String[] fields= s.split(";") ;
return fields[2];
});
// print results
System.out.println("Answer to question 1 -> " + YearRDD.countByValue());
/* ---- EXERCÍCIO 2 ---- Filters "Narcotics" type from colun nº 4 ----*/
JavaRDD<String> JustNarcotics = arquivo.filter(s -> {
String [] fields = s.split(";");
String type = campos [4];
return type.equalsIgnoreCase("NARCOTICS");
});
/* ---- EXERCÍCIO 2 ---- Filter by year ---- EXERCÍCIO 2 ---- */
JavaRDD<String> YearByNarcoticsRDD = JustNarcotics.map(s -> {
String [] fields = s.split(";");
return fields[2];
});
//Prints the result ---- EXERCÍCIO 2 ----
System.out.println("Answer to the question 2 -> " + AnoporNarcoticsRDD.countByValue());
// ---- EXERCÍCIO 3 ---- Aplying filter for even days ----
JavaRDD<String> EvenDayRDD = arquivo.filter(s -> {
String [] fields= s.split(";");
String type = fields[4];
int day = Integer.valueOf(fields[0]);
return(type.equalsIgnoreCase("NARCOTICS")&&(day % 2 == 0));
});
JavaRDD<String> EvenDaysRDD = EvenDayMapRDD.map(s -> {
String [] fields= s.split(";");
return fields[0];
});
//prints the result ---- EXERCÍCIO 3 ----
System.out.println("Awswer to the question 3 -> " + EvenDayMapRDD.countByValue());
谢谢!
ps:上面的代码可能有些错误,它是葡萄牙语的,但我翻译了它以便更好地理解。它工作得很好。
ps2:我还没有为我提到的问题做任何事情(最高和平均)。这是我第一次用java和spark编程,这样我就可以使用一些帮助,即使是这些“基础”的东西。
1条答案
按热度按时间gcmastyq1#
正如这里所回答的,如何使用两个“条件”过滤Spark?
将数据rdd转换为Dataframe。一旦有了Dataframe,一切都会变得更简单。
找到每月的最高犯罪率。
找到每天的最高犯罪率。
按犯罪类型找出最大犯罪率。
按月份和年份找出最大犯罪率。
根据您的要求,将最大值替换为平均值、最小值和类似值。