当前位置: 首页 > 知识库问答 >
问题:

Spark找不到窗口函数

西门洛城
2023-03-14

使用https://stackoverflow.com/a/32407543/5379015中提供的解决方案,我尝试重新创建相同的查询,但使用编程语法代替dataframeAPI,如下所示:

import org.apache.spark.{SparkContext, SparkConf}
import org.apache.spark.sql.hive.HiveContext
import org.apache.spark.sql.expressions.Window
import org.apache.spark.sql.functions._

object HiveContextTest {
  def main(args: Array[String]) {
    val conf = new SparkConf().setAppName("HiveContextTest")
    val sc = new SparkContext(conf)
    val sqlContext = new HiveContext(sc)
    import sqlContext.implicits._

    val df = sc.parallelize(
      ("foo", 1) :: ("foo", 2) :: ("bar", 1) :: ("bar", 2) :: Nil
    ).toDF("k", "v")


    // using dataframe api works fine

    val w = Window.partitionBy($"k").orderBy($"v")
    df.select($"k",$"v", rowNumber().over(w).alias("rn")).show


    //using programmatic syntax doesn't work

    df.registerTempTable("df")
    val w2 = sqlContext.sql("select k,v,rowNumber() over (partition by k order by v) as rn from df")
    w2.show()

  }
}

第一个df.select($“k”,$“v”,rowNumber().over(w).alias(“rn”)).show工作正常,但是w2.show()结果是

Exception in thread "main" org.apache.spark.sql.AnalysisException: Couldn't find window function rowNumber;

共有1个答案

吴俊晤
2023-03-14

rownumber的SQL等效项是row_number:

SELECT k, v, row_number() OVER (PARTITION BY k ORDER BY v) AS rn FROM df
 类似资料:
  • 我在Scala中查看幻灯片函数中的Spark。

  • 我正在运行一个selenium-webdriver javascript scraper,它登录到一个站点并单击一个按钮来启动一个新的选项卡/窗口。我正试图切换驱动程序以关注新生成的窗口,但Selenium找不到它。我要看的代码: 它是原始的浏览器窗口。是什么原因导致硒不能在新窗口上出现?

  • 问题内容: 我正在使用Selenium WebDriver来自动化我的公司站点。一方面,Web应用程序通过以下方式打开一个新窗口: 我们正在使用jQuery,尽管我认为这是自定义的。我在测试团队中,不做任何网站开发。无论如何,它使用JavaScript打开一个新窗口。脚本单击此链接后,我需要它附加到新窗口。 问题在于,在IE9中运行时,WebDriver似乎找不到新窗口。这是我用来尝试切换到新窗口

  • 我正在与Selenium WebDriver自动化我的公司网站。有一次,Web应用程序通过以下方式打开一个新窗口: 我们正在使用jQuery,尽管我认为这是定制的。我是测试团队的成员,不做任何网站的开发工作。无论如何,它使用JavaScript打开一个新窗口。脚本单击此链接后,我需要将其附加到新窗口。 问题是WebDriver在IE9中运行时似乎找不到新窗口。下面是我用来尝试切换到新窗口的代码:

  • 所以我正在学习Selenium用于Java的测试自动化,我有一个错误消息,比如IntelliJ中的标题“windows()”是红色的。 我试图导入org.openqa.selenium.WebDriver。选项,但它是灰色的,所以没用。 我能做些什么来解决这个问题? 提前谢谢