java - 如何在数据框中动态地从列表中选择列以及固定列
问题描述
我在 java8 中使用 spark-sql-2.4.1v。
我有动态的列列表被传递到我的函数中。
IE
List<String> cols = Arrays.asList("col_1","col_2","col_3","col_4");
Dataset<Row> df = //which has above columns plus "id" ,"name" plus many other columns;
需要选择cols + "id" + "name"
我正在做如下
Dataset<Row> res_df = df.select("id", "name", cols.stream().toArray( String[]::new));
这给出了编译错误。那么如何处理这个用例。
试过:
当我执行以下操作时:
List<String> cols = new ArrayList<>(Arrays.asList("col_1","col_2","col_3","col_4"));
cols.add("id");
cols.add("name");
给出错误
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:148)
at java.util.AbstractList.add(AbstractList.java:108)
解决方案
您可以创建 Columns 数组并将其传递给 select 语句。
import org.apache.spark.sql.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
List<String> cols = new ArrayList<>(Arrays.asList("col_1","col_2","col_3","col_4"));
cols.add("id");
cols.add("name");
Column[] cols2 = cols.stream()
.map(s->new Column(s)).collect(Collectors.toList())
.toArray(new Column[0]);
settingsDataset.select(cols2).show();
推荐阅读
- testing - 如何与 NightwsatchJS 并行运行单独的测试
- python - Python MYSQL游标更新查询不起作用
- java - 从 bean 获取唯一的实体 id
- php - WooCommerce 订单列表:根据过滤结果计算总计
- asp.net-mvc - 通过操作过滤器属性更新他的信息后,如何重定向到同一页面(用户试图访问)?
- asp.net-mvc - 即使操作中没有错误,asp.net core 也会抛出 500
- php - 没有优惠券 = 免运费,有优惠券 = 有运费 - WooCommerce
- reactjs - 如何在 React 的函数中返回 JSON
- php - 如何在 PHP 中搜索嵌套的 JSON 数组
- vue.js - 在 Vue.js 开发模式下对 CSS 进行重复数据删除