Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从数据帧中应用SQL函数_Sql_Scala_Apache Spark_Dataframe_Apache Spark Sql - Fatal编程技术网

从数据帧中应用SQL函数

从数据帧中应用SQL函数,sql,scala,apache-spark,dataframe,apache-spark-sql,Sql,Scala,Apache Spark,Dataframe,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]))

以下内容在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]))
我们如何直接从数据帧应用合并

scala> df.groupBy("coalesce(optPrefix.optSysIp,'--')").count.collect
org.apache.spark.sql.AnalysisException: Cannot resolve column name 
 "coalesce(optPrefix.optSysIp,'--')

我研究了数据帧上的方法。我看不出有什么办法来执行这个联合行动。想法?

您可以使用
合并功能:

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|
// |                  --|
// +--------------------+

您可以使用
合并
功能:

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|
// |                  --|
// +--------------------+

thx实际上我也尝试过类似的东西,但它在文字上不起作用,似乎只在列上起作用。i、 e:尝试将$“bar”替换为“-”。。无论如何,由于你的评论很有帮助,我已经投了赞成票。这是一次令人惊讶的小交流。thx实际上我也尝试过类似的方法,但它在文本上不起作用,似乎只在列上起作用。i、 e:尝试将$“bar”替换为“-”。。无论如何,由于你的评论很有帮助,我已经投了赞成票。这是一次令人惊讶的小交流。谢谢你过来。