【问题标题】:How to return distinct values of a column in a list in an efficient way?如何以有效的方式返回列表中列的不同值?
【发布时间】:2023-02-11 01:55:51
【问题描述】:

我想创建一个包含 csv 数据集的不同列值的列表列表。 内部列表应该包含(对于每一列)列名作为第一个元素,然后是相关的不同列值。

我尝试的方法效率不高,这是 Java 中的代码:

List<List<String>> finalList = new ArrayList<List<String>>();
    Dataset<Row> df = spark.read().format("csv").option("header", "true").load("/pathToCSV);
    String[] columnNames = df.columns();
 
for (int i=0;i<columnNames.length;i++) {
    List<String> columnList = new ArrayList<String>();
    
    columnList.add(columnNames[i]);
     

    List<Row> columnValues = df.filter(org.apache.spark.sql.functions.col(columnNames[i]).isNotNull()).select(columnNames[i]).distinct().collectAsList();
    for (int j=0;j<columnValues.size();j++)
        columnList.add(columnValues.get(j).apply(0).toString());

    finalList.add(columnList);
}

【问题讨论】:

    标签: java apache-spark


    【解决方案1】:

    只需使用 Java Set 数据结构。它确保有不同的值。例子:

    import java.util.Set;
    import java.util.Hashset;
    
    ....
    
    Set<String> distinctColums = new HashSet<String>();
    distinctColums.addAll(columnValues);
    

    【讨论】:

      猜你喜欢
      • 2021-09-10
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      • 1970-01-01
      • 2020-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多