jav*_*dba 1 sql scala dataframe apache-spark apache-spark-sql
以下在Spark SQL中起作用:
val df = sqlc.sql(
"select coalesce(optPrefix.optSysIp,'--') as ip, count(1) as cnt
from llines group by coalesce(optPrefix.optSysIp,'--')"
).collect
res39: Array[org.apache.spark.sql.Row] = Array([192.168.1.7,57],[--,43]))
Run Code Online (Sandbox Code Playgroud)
我们如何直接从数据框中应用合并?
scala> df.groupBy("coalesce(optPrefix.optSysIp,'--')").count.collect
org.apache.spark.sql.AnalysisException: Cannot resolve column name
"coalesce(optPrefix.optSysIp,'--')
Run Code Online (Sandbox Code Playgroud)
我研究了数据框上的方法。我无法辨别任何运行此合并操作的方法。有想法吗?
您可以使用coalesce
功能:
import org.apache.spark.sql.functions.{coalesce, lit}
case class Foobar(foo: Option[Int], bar: Option[Int])
val df = sc.parallelize(Seq(
Foobar(Some(1), None), Foobar(None, Some(2)),
Foobar(Some(3), Some(4)), Foobar(None, None))).toDF
df.select(coalesce($"foo", $"bar", lit("--"))).show
// +--------------------+
// |coalesce(foo,bar,--)|
// +--------------------+
// | 1|
// | 2|
// | 3|
// | --|
// +--------------------+
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3818 次 |
最近记录: |