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