2016-11-18 8 views
0

SPARK(Java Api)で2つの異なる長い文字列の単語が一致するかどうかを知りたいと思います。Java spark wordが2つの文字列の間で一致する

String string1 = "car bike bus ..." (about 100 words); 
String string2 = "boat plane car ..." (about 100 words); 

どうすればいいですか?

私はアプローチを作成しましたが、私はit's効率的ではない(あまりにも多くの反復)を考える:

List<String> a1 = new ArrayList<>(); 
List<String> a2 = new ArrayList<>(); 

a1.add("car"); 
a1.add("boat"); 
a1.add("bike"); 

a2.add("car"); 
a2.add("nada"); 
a2.add("otro"); 


JavaRDD<String> rdd = jsc.parallelize(a1); 
JavaRDD<String> counts = rdd.filter(new Function<String, Boolean>() { 
    @Override 
    public Boolean call(String s) throws Exception { 
     Boolean occurrence = false; 
     for(int i=0; i<a2.size(); i++) { 
      if(StringUtils.containsIgnoreCase(s, a2.get(i))) { 
       System.out.println("encontrado"); 
       occurrence = true; 
       break; 
      } 
     } 
     return occurrence; 
    } 
}); 
System.out.println(counts.count()); 

答えて

0

あなたはRDDおよびデータセットの両方で利用可能ですintersectメソッドを使用することができます。以下は、Spark 2.0、JavaおよびDatasetを使用したサンプルです。

public class SparkIntersection { 
    public static void main(String[] args) { 
    //SparkSession 
    SparkSession spark = SparkSession 
      .builder() 
      .appName("SparkIntersection") 
      .config("spark.sql.warehouse.dir", "/file:C:/temp") 
      .master("local[*]") 
      .getOrCreate(); 
    //List 
    List<String> data1 = Arrays.asList("one","two","three","four","five"); 
    List<String> data2 = Arrays.asList("one","six","three","nine","ten"); 
    //Dataset 
    Dataset<String> ds1 = spark.createDataset(data1, Encoders.STRING()); 
    Dataset<String> ds2 = spark.createDataset(data2, Encoders.STRING()); 
    //Intersect 
    Dataset<String> ds = ds1.intersect(ds2); 
    ds.show(); 
    //stop 
    spark.stop(); 
    } 
} 
+0

cool!これは私が探していたものです... –

関連する問題