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

从SQL查询火花数据帧

周翰池
2023-03-14

我正在尝试使用Apache Spark,以便将具有多个连接和子选择的(大型)SQL查询的结果加载到来自Spark的DataFrame中,如从SQL查询创建Spark Dataframe中所述。

不幸的是,我这样做的尝试导致了拼花错误:

线程“main”组织中出现异常。阿帕奇。火花sql。AnalysisException:无法推断拼花地板的架构。必须手动指定。

我从谷歌看到的信息表明,当数据帧为空时,就会发生此错误。然而,查询结果在DBeaver中加载了大量行。

下面是一个查询示例:

(SELECT REPORT_DATE, JOB_CODE, DEPT_NBR, QTY
    FROM DBO.TEMP 
    WHERE  BUSINESS_DATE = '2019-06-18' 
    AND   STORE_NBR IN (999) 
    ORDER BY BUSINESS_DATE) as reports

我的Spark代码如下所示。

val reportsDataFrame = spark
  .read
  .option("url", db2JdbcUrl)
  .option("dbtable", queries.reports)
  .load()

scheduledHoursDf.show(10)

我在前面的回答中读到,可以使用此方法对整个数据库运行查询。特别是,如果您在Spark中首次构建数据帧时将“dbtable”参数指定为别名查询,则会出现这种情况。您可以看到,我在查询中通过将整个查询指定为别名“as reports”来实现这一点。

我不认为这是一个重复的问题。我对这个具体问题进行了广泛的研究,没有发现任何人在网上面临同样的问题。特别是运行查询导致的拼花错误。

似乎大家一致认为,不应该以这种方式运行SQL查询,而应该使用Spark的DataFrames许多方法来过滤、分组和聚合数据。然而,即使会导致性能下降,但能够使用原始SQL对我们来说也是非常有价值的。

共有1个答案

广亮
2023-03-14

快速查看您的代码告诉我您丢失了格式(“jdbc”)

val reportsDataFrame = spark
  .read
  .format("jdbc")
  .option("url", db2JdbcUrl)
  .option("dbtable", queries.reports)
  .load()

如果您设置了用户名和密码以连接到数据库,则应该可以这样做。

了解spark中JDBC源代码的良好资源(https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html)

 类似资料:
  • 我使用rdd读取csv文件,只从dataframe中获取一列,并使用scala toArray将其转换为数组。 之后,我在sql中使用这个数组来检查这个数组中是否有一个字段值。 我使用Postgresql和jooq 3.11,但无论我怎么努力,我不能呈现sql,因为它需要。 下面的代码是。但是,它不会生成sql。我在用和,以及()中的相同问题的版本:

  • 本节将学习如何从SQL Server数据库查询数据。从一个简单的查询开始,查询语句用于从单个或多个表中检索数据。 SQL是一种特殊目的的编程语言,它是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。SQL语句无论是种类还是数量都是繁多的,很多语句也是经常要用到的,SQL查询语句就是一个典型的例子,无论是高级查询还是低级查询,SQL查询语

  • 我确信这是一个简单的SQLContext问题,但我在Spark docs或Stackoverflow中找不到任何答案 我想从MySQL上的SQL查询创建一个Spark数据框 例如,我有一个复杂的MySQL查询,如 我想要一个带有X、Y和Z列的数据帧 我想出了如何将整个表加载到Spark中,然后可以将它们全部加载,然后在那里进行连接和选择。然而,这是非常低效的。我只想加载SQL查询生成的表。 这是我

  • 我想过滤掉具有“c2”列前3个字符的记录,无论是“MSL”还是“HCP”。 所以输出应该如下所示。 有谁能帮忙吗? 我知道df。过滤器($c2.rlike(“MSL”))--用于选择记录,但如何排除记录? 版本:Spark 1.6.2 Scala:2.10

  • 问题内容: 我的代码有问题。 像这样的情况: 我有一个下拉列表,如果选择“个人”,则会出现新的下拉列表,其中包含从数据库查询中检索到的数据;如果选择“公开”,则该下拉列表将消失。 这样的HTML代码: 查询如下: 像这样的JavaScript代码: 我不知道如何将值/结果发送到javascript代码(选择选项中的值和名称)。 问题答案: 在javascript中,您必须对您的php文件进行操作:

  • 我正在使用Spark 2.1.0和Java SparkSession来运行我的SparkSQL。我正在尝试保存一个