【问题标题】:Filter spark columns dynamically at run-time在运行时动态过滤火花列
【发布时间】:2019-04-12 15:55:25
【问题描述】:

我需要创建一个 spark 过滤器语句,用于过滤在运行时动态传递给它的列列表。

我有一个 SQL 数据库表,其中有一列存储大数据表的列名列表。大数据表已分配给 spark 数据集,我需要使用此列列表来检查列表中找到的任何数据集列是否存在数据问题,例如 null 或空字符串,并返回受影响的行数.列的列表将在运行时确定。列表的大小会有所不同。

public int returnRowCount (List<String> columnsAffected, Dataset<Row> dataset) {

    return dataset.filter(dataset.col(columnsAffected.get(0)).isNotNull() 
          || dataset.col(columnsAffected.get(0)).notEqual("") 
          || dataset.col(columnsAffected.get(1)).isNotNull() 
          || dataset.col(columnsAffected.get(1)).notEqual("") 
          || etc ).count();

}

我需要获取任何列列表和任何数据集的方法。我希望列表中受 null 或空字符串影响的任何列只计算一次

【问题讨论】:

    标签: java apache-spark apache-spark-dataset


    【解决方案1】:

    您可以创建字符串过滤器表达式并在DataSets中使用该过滤器

    public long returnRowCount (List<String> columnsAffected, Dataset<Row> dataset) {
        String str = "";
    
        for (String col : columnsAffected){
            if (str != "")
                str = str + String.format("or %1$s is null or %1$s == '' ", col);
            else
                str = String.format(" %1$s is null or %1$s == '' ", col);
        }
        return dataset.filter(str).count();
    }
    
    

    【讨论】:

      猜你喜欢
      • 2018-12-17
      • 1970-01-01
      • 2020-06-27
      • 1970-01-01
      • 2018-09-18
      • 1970-01-01
      • 1970-01-01
      • 2020-08-09
      • 2016-05-01
      相关资源
      最近更新 更多