2

私はspark javaでisin関数を使用しており、idのリストを渡すと、は渡されたリストの順番でIDを取得する必要があります。しかし、isin関数を使用した後、Orderが変更されています。これはDatasetの順序を維持しています。spark javaでisin関数を使用している間、リストの順序を保持

リストのように注文を保存するにはどうすればよいですか?

JavaSparkContext sc = new JavaSparkContext(new SparkConf().setAppName("SparkJdbcDs").setMaster("local[*]")); 
SQLContext sqlContext = new SQLContext(sc); 
SparkSession spark = SparkSession.builder().appName("JavaTokenizerExample").getOrCreate(); 

RowFactory.create("405-048011-62815", "CRC Industries"), 
       RowFactory.create("630-0746","Dixon value"), 
       RowFactory.create("4444-444","3M INdustries"), 
       RowFactory.create("4333-444","3M INdustries"), 
       RowFactory.create("4777-444","3M INdustries"), 
       RowFactory.create("4444-888","3M INdustries"), 
       RowFactory.create("4999-444","3M INdustries"), 
       RowFactory.create("5666-55","Dixon coupling valve")); 

StructType schema = new StructType(new StructField[] {new StructField("label1", DataTypes.StringType, false,Metadata.empty()), 
     new StructField("sentence1", DataTypes.StringType, false,Metadata.empty()) }); 

Dataset<Row> sentenceDataFrame = spark.createDataFrame(data, schema); 

List<String> listStrings = new ArrayList<String>(); 
listStrings.add("5666-55"); 
listStrings.add("630-0746"); 
listStrings.add("4777-444"); 
listStrings.add("4444-444"); 


Dataset<Row> matchFound1=sentenceDataFrame.filter(col("label1").isin(listStrings.stream().toArray(String[]::new))); 
matchFound1.show(); 

電流出力:

+--------+--------------------+ 

| label1|   sentence1| 

+--------+--------------------+ 

|630-0746|   Dixon value| 

|4444-444|  3M INdustries| 

|4777-444|  3M INdustries| 

| 5666-55|Dixon coupling valve| 

+--------+--------------------+ 

予想される出力:

+--------+--------------------+ 

| label1|   sentence1| 

+--------+--------------------+ 

| 5666-55|Dixon coupling valve| 

|630-0746|   Dixon value| 

|4777-444|  3M INdustries| 

|4444-444|  3M INdustries| 

+--------+--------------------+ 
+0

いくつかのオプション1)DataFrameをラベルでソートします。 2)参加する代わりに、#1をやる必要があります。特に、sql.functions.broadcast結合ヒントを使用すると、規模のパフォーマンスが大幅に向上する可能性があります。 3)大きなDFではOKではありませんが、collectAsListを使ってそのように一致させることができます。 4)値をマップし、一致するものを見つけ、一致するレコードのみを含む新しいリスト/ DFを作成する。 5)パーティションをソートし(そしてこの理論のテストのために明示的に1つだけ作る)、あなたのマッチを行います。電話では、私は適切に提案をテストすることができませんATM – Garren

+0

lableにハイフン( - )があるため、並べ替えることができません – jeevitesh

答えて

0

私はあなたがaswell順序を保持し、あなたが代わりにlistdataframeを作成し、sentenceDataFrameに参加することを示唆しています。これは、listfilteringを作成するとより効果的です。

関連する問題