我可以对列执行哪些操作

时间:2019-02-07 20:47:54

标签: scala apache-spark apache-spark-sql

我有一张桌子

DEST_COUNTRY_NAME   ORIGIN_COUNTRY_NAME count
United States   Romania 15
United States   Croatia 1
United States   Ireland 344

我将以上内容转换为DataFrame

val flightData2015 = spark
.read
.option("inferSchema", "true")//infers the input schema automatically from data
.option("header", "true")//uses the first line as names of columns.
.csv("/data/flight-data/csv/2015-summary.csv");

使用DataFrame函数只能从col中获取一列

scala> data.col("count");
res70: org.apache.spark.sql.Column = count

但是我注意到没有为Column列出任何动作。我是否可以对Column进行任何操作,例如maxshow

我尝试在max列上运行count函数,但仍然看不到任何结果。

scala> max(dataDS.col("count"));
res78: org.apache.spark.sql.Column = max(count)

如何在Column上执行操作?

2 个答案:

答案 0 :(得分:1)

没有任何动作。列不是分布式数据结构,并且未绑定到特定数据。

相反,列是要在Dataset的特定上下文中进行评估的表达式,例如selectfilteragg

答案 1 :(得分:1)

您可以look at the ScalaDoc

SparkSQL docs中,那些$"name"事物也是Column对象。

因此,您可以执行flightData2015.select($"count" > 1).show(),并且只会得到两行。

如果要查找最大值,则需要以其他方式从DataFrame中选择它

类似这样的东西

// TODO: import sql functions

flightData2015.select(max($"count"))