Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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
Apache spark 在Spark中使用窗口功能_Apache Spark_Apache Spark Sql_Window Functions - Fatal编程技术网

Apache spark 在Spark中使用窗口功能

Apache spark 在Spark中使用窗口功能,apache-spark,apache-spark-sql,window-functions,Apache Spark,Apache Spark Sql,Window Functions,我试图在Spark数据帧中使用rowNumber。我的查询在Spark shell中正常工作。但是当我在eclipse中编写它们并编译一个jar时,我面临一个错误 16/03/23 05:52:43 ERROR ApplicationMaster: User class threw exception:org.apache.spark.sql.AnalysisException: Could not resolve window function 'row_number'. Note that

我试图在Spark数据帧中使用rowNumber。我的查询在Spark shell中正常工作。但是当我在eclipse中编写它们并编译一个jar时,我面临一个错误

 16/03/23 05:52:43 ERROR ApplicationMaster: User class threw exception:org.apache.spark.sql.AnalysisException: Could not resolve window function 'row_number'. Note that, using window functions currently requires a HiveContext;
org.apache.spark.sql.AnalysisException: Could not resolve window function 'row_number'. Note that, using window functions currently requires a HiveContext;
我的疑问

import org.apache.spark.sql.functions.{rowNumber,max,broadcast}
导入org.apache.spark.sql.expressions.Window
val w=Window.partitionBy($“id”).orderBy($“value”.desc)
val dfTop=df.withColumn(“rn”,rowNumber.over(w))。其中($“rn”我以前已经回答了一个问题。错误消息说明了所有问题。使用spark,您将需要在应用程序jar中使用
HiveContext
,没有其他方法

您可以进一步了解SqlContext和HiveContext之间的区别

SparkSQL
有一个
SQLContext
和一个
HiveContext
HiveContext
SQLContext
的超集。Spark社区建议使用
HiveContext
。您可以看到,当您运行交互式驱动程序Spark shell时,它会自动创建一个
SparkContext
定义为sc,而HiveContext
定义为
sqlContext
HiveContext
允许您执行SQL查询和配置单元命令

您可以尝试检查
火花壳的内部:

Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /___/ .__/\_,_/_/ /_/\_\   version 1.6.0
      /_/

Using Scala version 2.10.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_74)

scala> sqlContext.isInstanceOf[org.apache.spark.sql.hive.HiveContext]
res0: Boolean = true

scala> sqlContext.isInstanceOf[org.apache.spark.sql.SQLContext]
res1: Boolean = true

scala> sqlContext.getClass.getName
res2: String = org.apache.spark.sql.hive.HiveContext
通过继承,
HiveContext
实际上是一个
SQLContext
,但反过来就不是这样了。如果您对了解
HiveContext
如何继承
SQLContext
更感兴趣,可以查看


由于spark 2.0,您只需要创建一个
SparkSession
(作为单个入口点)这将删除
HiveContext
/
SQLContext
混淆问题。

对于Spark 2.0,建议使用
SparkSession
作为单个入口点。它消除了
HiveContext
/
SQLContext
混淆问题

import org.apache.spark.sql.SparkSession
val session = SparkSession.builder
    .master("local")
    .appName("application name")
    .getOrCreate()

查看此文件了解如何使用它。

您的依赖项中是否仍然需要配置单元?
SparkSession
包含在Spark 2.0中。对于我使用的东西,配置单元不是必需的依赖项。这可能会因您计划执行的操作而异,我不能确定。