问题标签 [spark-jdbc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
47 浏览

sql-server - Pyspark - SQL 服务器 2005 - SQL 异常 151

我面临一个关于通过 pyspark 从 sql server2005 上的数据库支持中获取数据的问题。我有一个有 5 列的表:

当我尝试使用此命令导入数据时

我收到一个 SQL 异常: java.sqlSQLExcedption: Unrecognized SQL type -151

如果我将列转换为字符串,我可以正确获取数据,但我想按原样导入它,因为我有一个检查日期模式并检测差异的过程。

奇怪的是,在另一个具有相同结构和相同表但在 SQL Server 2016 上的数据库上完全相同的查询运行良好。我正在使用 Spark 2.3 版

有人可以帮我解决这个问题吗?

0 投票
0 回答
30 浏览

apache-spark - Spark jdbc 数据集将浮点列数据显示为 Oracle 的无穷大

我正在尝试使用 spark JDBC 读取 oracle 浮点列数据,但它为同一列提供了无穷大的值。下面是示例代码,

输出 :

在此处输入图像描述

我认为 spark 在内部将 float 列作为getFloat()获取,因此这个问题来了。是否有任何解决方法。这真的很有帮助。谢谢。

0 投票
0 回答
64 浏览

airflow - Airflow SparkJDBCOperator 示例 dag 以摄取到平面文件中

我正在尝试使用气流的 spark jdbc 运算符将数据摄取到几个镶木地板文件中。我有一堆表,想在 sparkJdbcOperator 上触发一个 for 循环

SparkJdbcOperator

我通过了 spark jdbc 运算符,它没有存储文件或文件名作为参数的位置。是否有使用 spark jdbc 运算符通过气流摄取数据的示例。请帮忙指出一个例子。

问候, 拉菲克

0 投票
1 回答
212 浏览

apache-spark - Spark JDBC读取API:动态确定日期时间类型列的分区数

我正在尝试使用 PySpark 从 RDS MySQL 实例中读取表。这是一个巨大的表,因此我想通过使用分区概念来并行化读取操作。该表没有用于查找分区数的数字列。相反,它有一个时间戳列(即日期时间类型)。

我通过检索时间戳列的最小值和最大值找到了下限和上限。但是,我不确定是否有标准公式可以动态找出分区数。这是我目前正在做的事情(硬编码 numPartititons 参数的值):

请向我建议一个可行的解决方案/您的方法。谢谢

0 投票
0 回答
58 浏览

apache-spark - Spark JDBC - 读取/更新/写入没有 int/long 主键的巨大表

我正在尝试更新没有任何主键的大型 MySQL 表中的某些列。

如果它的大小(例如 6GB)而我的执行程序内存只有 2GB,我该如何处理这么大的表?

您认为 Spark-ODBC 会以某种方式帮助我吗?

如果我要创建表,它将有一个主键:

0 投票
1 回答
602 浏览

apache-spark - Spark JDBC-读取->更新->写入没有主键的大表

我正在尝试更新一个大 mysql 表的每一行的几个字段(接近500百万行)。该表没有任何主键(或具有字符串主键,如 UUID)。我没有足够的执行程序内存来​​一次读取和保存整个数据。任何人都可以让我知道我处理此类表格的选项是什么。

下面是架构

Spark代码就像

这张表有大约150百万条记录,数据大小约为6GB. 我的执行者记忆只是2 gb. 我可以使用 Spark - jdbc 处理此表吗?

0 投票
0 回答
146 浏览

java - 使用 Simba Spark JDBC 驱动程序的多语句查询

我正在尝试使用 jdbc 连接调用 Databricks 集群。在这里,我想发送多个语句。一种是“缓存表选择”,另一种是选择创建的表。

我一直无法理解一系列事情,因为这两个语句的类型不同,我试图通过两次选择来进行第一次测试,但我一直无法这样做。

我的代码

我得到的错误

[Simba]SparkJDBCDriver 错误处理查询/语句。错误代码:0,SQL 状态:运行查询时出错:org.apache.spark.sql.catalyst.parser.ParseException:无关输入 'select' 期望 {,';'}(第 1 行,第 10 行)

我已经尝试使用 PreparedStatement 类或仅使用 Statement 而不是 CallableStatement,但我得到了同样的错误。

将选项 allowMultiQueries 添加到连接字符串也没有任何区别,但我相信问题出在此之前。

0 投票
0 回答
201 浏览

python - 如何在 Python 中注册 JDBC Spark 方言?

我正在尝试从数据块表中读取数据。我已经使用了数据块中集群的 url。我收到此错误:

在这些声明之后:

我遇到了这个问题的所有 Scala 解决方案,但我使用的是 python。我想要这个代码的python等价物:

0 投票
0 回答
78 浏览

sql - 如何在可移植 JDBC 中获取数组类型的基本类型

如果您有一个表,其列的类型为 SQL ARRAY,您如何找到数组类型的基本类型,也就是数组类型的各个元素的类型?

  • 您如何在与供应商无关的纯 JDBC 中做到这一点?
  • 在不获取和检查实际行数据的情况下如何做到这一点?等效地:如果表是空的怎么办?

类似的问题在这里被问到:

但是,我要求通过 JDBC API 本身提供一种与供应商无关的方式。我在问:应该如何使用与供应商无关的纯 JDBC 来解决这个问题?这个用例看起来像是 JDBC 的一个核心用例,我真的很惊讶我在 JDBC 中找不到解决方案。

我花了几个小时阅读和重新阅读 JDBC API javadocs,又花了几个小时在互联网上搜索,我很惊讶似乎没有通过 JDBC API 执行此操作的正确方法。它应该通过 DatabaseMetaData 或 ResultSetMetaData 存在,但显然不是。

以下是我发现的不足的解决方法和替代方法。

  • 获取一些行,直到获得具有该列实际值的行,获取列值,转换为 java.sql.Array,然后调用 getBaseType。
  • 对于 postgres,假设 SQL ARRAY 类型名称编码为 ("_" + baseTypeName)。
  • 对于 Oracle,请使用允许获得答案的 Oracle 特定扩展。
  • 一些数据库有一个特殊的“element_types”视图,其中包含当前表等使用的每个 SQL ARRAY 类型的一行,并且该行包含基本类型和基本类型名称。

我的上下文是,我想在我公司产品的云中使用供应商提供的 JDBC 连接器,元数据发现变得很重要。我还在研究自己为其他还没有 JDBC 驱动程序和 spark 连接器的数据源编写 JDBC 连接器的可行性。元数据发现很重要,这样才能正确定义 Spark InternalRow 和 Spark-JDBC 数据获取器。目前,Spark-JDBC 对 SQL ARRAY 和 SQL STRUCT 的支持非常有限,但我设法用一两天的编码来提供缺失的位,但在此过程中,我遇到了这个阻碍我的问题。如果我可以控制 JDBC 驱动程序的实现,那么我可以使用一个 kludge(即在类型名称和 Spark JdbcDialect 中编码类型信息,获取类型名称并对其进行解码以创建 Catalyst 类型)。但是,我想以正确的 JDBC 方式进行操作,并且理想情况下,我希望以其他一些供应商提供的 JDBC 驱动程序将支持的方式进行操作。

PS:找到DatabaseMetaData.getAttributes() 花了我惊人的时间。如果我没看错的话,这可以给我 SQL STRUCT 的字段/属性的名称和类型。同样,我很惊讶我可以在与供应商无关的纯 JDBC 中获得 SQL STRUCT 的字段/属性的名称和类型,但在与供应商无关的纯 JDBC 中无法获得 SQL ARRAY 的基本类型。

0 投票
1 回答
163 浏览

apache-spark - Spark JDBC 上界

您好,我想使用 spark jdbc 连接将几个表从 Oracle 导入 hdfs。为了确保并行性,我想为每个表选择正确的上限。我计划将 row_number 作为我的分区列,并将表的计数作为上限。有没有更好的方法来选择upperBound?,因为我必须在第一时间连接到表才能获得计数。请帮忙