问题标签 [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 回答
450 浏览

apache-spark - Spark通过JDBC读取RDBMS时是否有参数分区?

当我运行spark应用程序进行表同步时,错误信息如下:

我认为这是由于表中的大量数据造成的。我之前用过mongo分区相关的参数,比如:spark.mongodb.input.partitionerspark.mongodb.input.partitionerOptions.partitionSizeMB 我想知道Spark在通过JDBC读取RDBMS时是否有类似的分区参数?

0 投票
1 回答
352 浏览

apache-spark - 如何在没有列名的情况下使用 pyspark 写入 JDBC

我的问题真的很简单。

我正在使用 pyspark 将配置单元表导出到 SQL Server。

我发现我将列名导出为 SQL Server 中的行。

我只想在没有列名的情况下这样做。

在此处输入图像描述

我不希望表格中的这些列...

我的pyspark代码在这里:

是否有跳过列名的选项?

0 投票
0 回答
864 浏览

java - 用于 postgres 表中 TEXT 数据类型的 spark createTableColumnTypes

在创建表时,我在 spark 数据集中使用createTableColumnTypes数据库列数据类型而不是默认值。它非常适合,VARCHAR(n)但如果我使用TEXT它会抛出错误。代码是用 Java 编写的

错误如下

线程“主”org.apache.spark.sql.catalyst.parser.ParseException 中的异常:不支持 DataType 文本。(第 1 行,第 29 行)

0 投票
1 回答
106 浏览

apache-spark - spark JDBC sink 在节点级别是事务安全的吗?

我有一个关于在分区级别打开事务的问题。如果我使用 jdbc 连接器写入数据库(postgess),那么在工作节点上的分区特定写入是否是事务安全的,即

如果一个worker节点在写数据的时候宕机了,这个partition/worker节点相关的行会被回滚吗?

0 投票
1 回答
147 浏览

pyspark - 使用 sparkJDBCDataset 加载数据但 jar 不起作用

当使用sparkJDBCDatasetJDBC 连接加载表时,我一直遇到 spark 找不到我的驱动程序的错误。驱动程序肯定存在于机器上,并且它的目录spark.ymlconfig/base.

我也按照说明添加了def init_spark_session方法到src/project_name/run.py. 不过,我很怀疑,这里定义的 sparksession 并没有被sparkJDBCDataset班级接受。当您查看用于创建 sparksession 并在其中加载数据集的源代码时sparkJDBCDataset,看起来就像定义了一个没有配置的 vanilla sparksession 来加载和保存数据。内部定义的配置spark.yml不用于创建此 sparksession。以下是源代码的摘录

当我从 Kedro 外部的 jdbc 源加载数据时,使用定义的 SparkSession spark.jars,数据按预期加载。

在构建读取数据的 sparksession 时,有没有办法指定spark.jars其他 sparkConf?

0 投票
1 回答
389 浏览

apache-spark - spark如何从jdbc读取数据并分发数据

在获取外部数据库数据时,我需要弄清楚 spark 是如何在后台工作的。我从 spark 文档中了解到的是,如果我不提及诸如“numPartitons”、“lowerBound”和“upperBound”之类的属性,那么通过 jdbc 读取不是并行的。在这种情况下会发生什么?数据是否由 1 个获取所有数据的特定执行程序读取?那么并行性是如何实现的呢?那个 executor 以后会和其他 executor 共享数据吗?但我相信 executor 不能像这样共享数据。

如果你们中的任何人探索过这个,请告诉我。

编辑我的问题 - 嗨,阿米特,感谢您的回复,但这不是我想要的。让我详细说明一下: - 参考这个 - https://spark.apache.org/docs/latest/sql-data-sources-jdbc.html

请参阅下面的代码片段 -

输出 :

在这里,我使用自定义函数 db.getDataFromGreenplum_Parallel(ss, MultiJoin, bs,5,"bu_id",10,9000) 读取表,该函数指定基于字段 bu_id 创建 5 个分区,其下限值为 10,上限值为 9000。查看 spark 如何通过 5 个并行连接读取 5 个分区中的数据(如 spark doc 所述)。现在让我们在不提及上述任何参数的情况下阅读此表 -

我只是使用另一个函数获取数据-val MultiJoin_vw = db.getDataFromGreenplum(ss, MultiJoin, bs)

在这里,我只传递了 spark 会话(ss)、获取数据的查询(MultiJoin)和另一个用于异常处理的参数(bs)。o/p 如下所示 – Fetch Starts

查看数据如何读入一个分区,意味着只产生 1 个连接。问题仍然是这个分区将只在一台机器上,并且将分配一个任务。所以这里没有并行性。那么数据如何分发给其他执行者呢?

顺便说一下,这是我在两种情况下都使用的 spark-submit 命令——

0 投票
1 回答
105 浏览

scala - 无法在 Spark SQL 中进行 DB2 COALESCE

我有一个表ENTITLE_USER,如果它们不为空,我想从中选择用户 ID,否则为 -1。为此,我正在使用COALESCEDB2 的功能。我正在像这样在 Spark 中阅读我的查询:

当我这样做时df1.printSchema,我得到以下输出,这是预期的:

现在,当我尝试这样做时,df1.select("USER_ID").show()它会抛出一个很好的堆栈跟踪Exception

COALESCE对于使用并尝试在 Spark JDBC 中运行的任何 DB2 查询,这通常是正确的。

有什么方法可以让我们使用COALESCESpark JDBC 运行查询。

0 投票
1 回答
122 浏览

apache-spark - 如何以追加模式将“所有字符串”数据帧写入 Spark JDBC 到具有 int 和 varchar 列的目标表

我从 csv 文件创建 spark 数据框,并尝试将其插入到具有 integer 和 varchar 列的 rdbms 表中。由于我的数据框都是字符串类型,因此在“追加”模式下失败。如果我使用覆盖模式,将使用所有 varchar 列重新创建 rdbms 表。如何通过处理 spark 数据框中的数据类型以追加模式将数据插入 rdbms 表?

0 投票
1 回答
54 浏览

scala - 如何参数化将数据帧写入配置单元表

我在 RBDMS 中有一个表列表(跨不同类别),我想将其提取并保存在 hive 中,并且我想以能够将类别名称附加到 hive 中的输出位置的方式进行参数化。例如,我有一个类别“员工”,我希望能够以“hive_db.employee_some_other_random_name”格式保存从 RDBMS 提取的表

我有如下代码

我有下面第一张表的结果。相同的结果适用于其他表..

它没有将提取的数据框写入配置单元,而是打印列名

如何将 DF 写入配置单元表?

0 投票
1 回答
111 浏览

dataframe - spark jdbc - 到源的多个连接?

有人提到,当我们使用生成数据帧的 spark.read JDBC 时,如果我们在该数据帧上执行两次 df.write。**它会创建两个到源的连接吗?** 我需要一些帮助,以了解有关 spark 的内部工作原理的更多见解。

所以假设我创建了一个函数来返回一个 df

现在我将从上述函数返回的 df 写在两个地方。

现在,如果我如下在 main 中调用它,那真的会与源建立两个连接吗?如果是; 有什么方法可以避免这种情况并且只读一次。此处有关 spark for load 的文档引用 load() “从数据源加载数据并将其作为 a:class 返回DataFrame。” 所以需要更多关于这里内部发挥作用的背景信息。