Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.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
在Java中,如何根据特定字段值过滤Spark RDD?_Java_Filter_Apache Spark - Fatal编程技术网

在Java中,如何根据特定字段值过滤Spark RDD?

在Java中,如何根据特定字段值过滤Spark RDD?,java,filter,apache-spark,Java,Filter,Apache Spark,我正在用Java创建一个Spark工作。这是我的密码 我正在尝试从CSV文件中筛选记录。标题包含字段OID,COUNTRY\u NAME 我不想仅仅基于s.contains(“加拿大”)进行过滤,我想更具体一些,比如我想基于COUNTRY\u NAME.equals(“加拿大”)进行过滤。 我该怎么做呢 public static void main(String[] args) { String gaimFile = "hdfs://xx.yy.zz.com/sandbox/data/

我正在用Java创建一个Spark工作。这是我的密码

我正在尝试从CSV文件中筛选记录。标题包含字段
OID
COUNTRY\u NAME

我不想仅仅基于
s.contains(“加拿大”)
进行过滤,我想更具体一些,比如我想基于
COUNTRY\u NAME.equals(“加拿大”)
进行过滤。 我该怎么做呢

public static void main(String[] args) {
    String gaimFile = "hdfs://xx.yy.zz.com/sandbox/data/acc/mydata"; 

    SparkConf conf = new SparkConf().setAppName("Filter App");
    JavaSparkContext sc = new JavaSparkContext(conf);
    try{
        JavaRDD<String> gaimData = sc.textFile(gaimFile);

        JavaRDD<String> canadaOnly = gaimData.filter(new Function<String, Boolean>() {

            private static final long serialVersionUID = -4438640257249553509L;

            public Boolean call(String s) { 
               // My file id csv with header OID, COUNTRY_NAME, .....
               // here instead of just saying s.contains 
               // i would like to be more specific and say 
               // if COUNTRY_NAME.eqauls("CANADA)
               return s.contains("CANADA"); 
            }
        }); 

    }
    catch(Exception e){
        System.out.println("ERROR: G9 MatchUp Failed");
    }
    finally{
        sc.close();
    }
}
publicstaticvoidmain(字符串[]args){
字符串gaimFile=”hdfs://xx.yy.zz.com/sandbox/data/acc/mydata"; 
SparkConf conf=new SparkConf().setAppName(“过滤器应用”);
JavaSparkContext sc=新的JavaSparkContext(conf);
试一试{
JavaRDD gaimData=sc.textFile(gaimFile);
JavaRDD canadaOnly=gaimData.filter(新函数(){
私有静态最终长serialVersionUID=-4438640257249553509L;
公共布尔调用(字符串s){
//我的文件id csv,带有标题OID、国家/地区名称。。。。。
//这里不是说s
//我想更具体地说
//如果国家/地区名称为“加拿大”
返回美国(“加拿大”);
}
}); 
}
捕获(例外e){
System.out.println(“错误:G9匹配失败”);
}
最后{
sc.close();
}
}

您必须首先将值映射到自定义类中:

rdd.map(lines=>ConvertToCountry(line))
   .filter(country=>country == "CANADA")

class Country{
  ...ctor that takes an array and fills properties...
  ...properties for each field from the csv...
}

ConvertToCountry(line: String){
  return new Country(line.split(','))
}
上面是Scala和伪代码的组合,但您应该明白这一点