在Java Spark中按索引选择列:从无表头CSV选取第2、5列
在Java Spark中选取无列名CSV的指定列
当读取无表头的CSV文件时,Spark会自动为列生成默认名称:_c0(第1列)、_c1(第2列)、_c2(第3列)……以此类推。要选取第2列和第5列,对应就是_c1和_c4。
下面是几种可行的实现方式:
方法1:直接通过默认列名选取
这是最简洁的方式,直接在select方法中传入目标列的默认名称:
Dataset<Row> selectedDataset = dataset.select("_c1", "_c4");
方法2:使用col函数选取
如果需要对列进行后续转换操作,这种方式更灵活:
import org.apache.spark.sql.functions; Dataset<Row> selectedDataset = dataset.select(functions.col("_c1"), functions.col("_c4"));
方法3:通过列索引动态选取
如果列的位置需要动态指定,可以先获取所有列名数组,再通过索引取值:
String[] allColumns = dataset.columns(); // 第2列对应索引1,第5列对应索引4 Dataset<Row> selectedDataset = dataset.select(allColumns[1], allColumns[4]);
完整示例代码
Dataset<Row> dataset = getSparkSession().get().read() .option("delimiter", "|") .option("header", false) .csv(fileName); // 选取第2列和第5列 Dataset<Row> selectedDataset = dataset.select("_c1", "_c4"); // 打印结果验证 selectedDataset.show();
内容的提问来源于stack exchange,提问作者Sun Yuting
相关产品推荐
相关产品推荐

