Как я могу изменить нечисловое значение во всем наборе данных, используя Spark? - PullRequest
0 голосов
/ 15 апреля 2019

Я использую набор данных с большим количеством столбцов, этот набор данных имеет?во всем наборе данных.Я хотел бы Spark (Java), чтобы изменить?до 0. До сих пор я могу сделать это только с одним столбцом, но я хотел бы сделать везде:

    Dataset<Row> csvData = spark.read()
            .option("header", false)
            .option("inferSchema", true)
            .option("maxColumns", 50000)
            .csv("src/main/resources/K9.data");

    csvData = csvData.withColumn("_c5409", when(col("_c5409").isNull(),0).otherwise(col("_c5409")) )
        .withColumn("_c0", when(col("_c0").equalTo("?"),0).otherwise(col("_c0")) );

Может быть, это простое решение, я новичок в Java и Spark:)

1 Ответ

1 голос
/ 15 апреля 2019

Вы можете создать список столбцов с помощью когда и использовать его в select, если он имеет дело со сложными случаями if и else

List<org.apache.spark.sql.Column> list = new ArrayList<org.apache.spark.sql.Column>();
for( String col : csvData.columns()){
    list.add(when(csvData.col(col).isNull(),0).otherwise(csvData.col(col)).alias(col));
}
csvData = csvData.select(list.toArray(new org.apache.spark.sql.Column[0]));

Если просто заменить нули, этого достаточно

csvData = csvData.na().fill(0, df.columns()); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...