簡體   English   中英

Java Spark - 在使用條件時對 Spark dataframe 列進行多值檢查

[英]Java Spark - Multiple value check on Spark dataframe column while using when condition

我有一個 dataframe 我正在創建一個列並根據其他列中的條件填充值。

List<String> new_lst = new ArrayList<String>();
new_lst.add("value 1");
new_lst.add("value_2");

df_new = df.withColumn("new_column",functions.when(functions.col("col_1").equalTo("A")
.and(functions.col("col_2").isin(new_lst.stream().toArray(String[]::new)),functions.col("col_3"))
.otherwise(functions.col("col_1");

當我使用上述內容時,我收到警告

令人困惑的參數 new_lst.stream().toArray(String[]::new,不清楚是否需要可變參數或非可變參數調用

我的要求是我通過檢查 col_1 是否等於 A 並且 col_2 具有 value_1 和 value_2 來創建一個名為 new_column 的列,然后我必須從 col_3 獲取值,否則從 col_1 獲取值。

請讓我知道在 java spark 中實現此功能的最佳方法。

api 如下 -

def isin(list: Any*): Column = withExpr { In(expr, list.map(lit(_).expr)) }

它基本上是來自 java 的Array<Object> 嘗試以下方法 - 使用isInCollection(Iterable<>)isin(Object[])

 List<String> new_lst = new ArrayList<>();
        new_lst.add("value_1");
        new_lst.add("value_2");

        Dataset<Row> df = spark.range(1).withColumn("col_1", lit("A"))
                .withColumn("col_2", lit("value_2"))
                .withColumn("col_3", lit("C"));
        Dataset<Row> df_new = df.withColumn("new_column",functions.when(functions.col("col_1").equalTo("A")
                .and(functions.col("col_2").isInCollection(new_lst)), functions.col("col_3"))
                .otherwise(functions.col("col_1"))
        );
        df_new.show(false);

        /**
         * +---+-----+-------+-----+----------+
         * |id |col_1|col_2  |col_3|new_column|
         * +---+-----+-------+-----+----------+
         * |0  |A    |value_2|C    |C         |
         * +---+-----+-------+-----+----------+
         */
        df.withColumn("new_column",functions.when(functions.col("col_1").equalTo("A")
                .and(functions.col("col_2").isin((Object[]) new_lst.toArray())),functions.col("col_3"))
                .otherwise(functions.col("col_1"))).show(false);
        /**
         * +---+-----+-------+-----+----------+
         * |id |col_1|col_2  |col_3|new_column|
         * +---+-----+-------+-----+----------+
         * |0  |A    |value_2|C    |C         |
         * +---+-----+-------+-----+----------+
         */

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM