Spark DataFrame - 使用 Java API 选择列列表

Posted

技术标签:

【中文标题】Spark DataFrame - 使用 Java API 选择列列表【英文标题】:Spark DataFrame - select list of columns using Java API 【发布时间】:2017-12-12 12:56:22 【问题描述】:

我正在尝试使用 Java API 从 DataFrame 中选择列列表。

示例 Java 代码:

List<String> colList = Arrays.asList(new String[]  "column1", "column2", "column3" );
df.selectExpr((String[])colList.toArray()).show();

在 Java API 中,我必须使用 selectExpr 而不是 select。有没有其他方法可以使用 Java API 选择列列表。

但在 Scala 中,我可以执行以下操作。

示例 Scala 代码:

val colList = List("column1", "column2", "column3")
df.select(colList.head, colList.tail: _*).show

【问题讨论】:

【参考方案1】:

你可以使用String的数组:

String[] colList =   "column1", "column2", "column3" ;
String first = colList[0];
String[] rest =  Arrays.copyOfRange(colList, 1, colList.length);

logData.select(first, rest);

Column的数组:

import static org.apache.spark.sql.functions.col;
import org.apache.spark.sql.Column;

Column[] colList =   col("column1"), col("column2"), col("column3") ;
logData.select(colList);

【讨论】:

第一种方法不是字符串数组,您首先以编程方式构建然后休息,第二种方法也是我们需要从列名列表中构建它作为字符串。 非常感谢!这是一种可爱而直接的方式。不是。 @Alper,很好。我的要求是,列会改变,比如有时我得到 col1、col2,有时我得到 col1、col2、col3。如何在第二种方法中动态地做到这一点。因为我还需要从参数中添加列别名。感谢您对此的投入。

以上是关于Spark DataFrame - 使用 Java API 选择列列表的主要内容,如果未能解决你的问题,请参考以下文章

Apache Spark:如何使用 Java 在 dataFrame 中的空值列中插入数据

Spark DataFrame - 使用 Java API 选择列列表

使用 Apache Spark 和 Java 将 CSV 解析为 DataFrame/DataSet

合并 Spark DataFrame 中的多列 [Java]

使用 Java 检查 Spark Dataframe 中是不是存在列

Spark SQL:如何使用 JAVA 从 DataFrame 操作中调用 UDF