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]