问题标签 [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.
apache-spark - Spark通过JDBC读取RDBMS时是否有参数分区?
当我运行spark应用程序进行表同步时,错误信息如下:
我认为这是由于表中的大量数据造成的。我之前用过mongo分区相关的参数,比如:spark.mongodb.input.partitioner
,spark.mongodb.input.partitionerOptions.partitionSizeMB
我想知道Spark在通过JDBC读取RDBMS时是否有类似的分区参数?
java - 用于 postgres 表中 TEXT 数据类型的 spark createTableColumnTypes
在创建表时,我在 spark 数据集中使用createTableColumnTypes
数据库列数据类型而不是默认值。它非常适合,VARCHAR(n)
但如果我使用TEXT
它会抛出错误。代码是用 Java 编写的
错误如下
线程“主”org.apache.spark.sql.catalyst.parser.ParseException 中的异常:不支持 DataType 文本。(第 1 行,第 29 行)
apache-spark - spark JDBC sink 在节点级别是事务安全的吗?
我有一个关于在分区级别打开事务的问题。如果我使用 jdbc 连接器写入数据库(postgess),那么在工作节点上的分区特定写入是否是事务安全的,即
如果一个worker节点在写数据的时候宕机了,这个partition/worker节点相关的行会被回滚吗?
pyspark - 使用 sparkJDBCDataset 加载数据但 jar 不起作用
当使用sparkJDBCDataset
JDBC 连接加载表时,我一直遇到 spark 找不到我的驱动程序的错误。驱动程序肯定存在于机器上,并且它的目录spark.yml
在config/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?
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 命令——
scala - 无法在 Spark SQL 中进行 DB2 COALESCE
我有一个表ENTITLE_USER
,如果它们不为空,我想从中选择用户 ID,否则为 -1。为此,我正在使用COALESCE
DB2 的功能。我正在像这样在 Spark 中阅读我的查询:
当我这样做时df1.printSchema
,我得到以下输出,这是预期的:
现在,当我尝试这样做时,df1.select("USER_ID").show()
它会抛出一个很好的堆栈跟踪Exception
:
COALESCE
对于使用并尝试在 Spark JDBC 中运行的任何 DB2 查询,这通常是正确的。
有什么方法可以让我们使用COALESCE
Spark JDBC 运行查询。
apache-spark - 如何以追加模式将“所有字符串”数据帧写入 Spark JDBC 到具有 int 和 varchar 列的目标表
我从 csv 文件创建 spark 数据框,并尝试将其插入到具有 integer 和 varchar 列的 rdbms 表中。由于我的数据框都是字符串类型,因此在“追加”模式下失败。如果我使用覆盖模式,将使用所有 varchar 列重新创建 rdbms 表。如何通过处理 spark 数据框中的数据类型以追加模式将数据插入 rdbms 表?
scala - 如何参数化将数据帧写入配置单元表
我在 RBDMS 中有一个表列表(跨不同类别),我想将其提取并保存在 hive 中,并且我想以能够将类别名称附加到 hive 中的输出位置的方式进行参数化。例如,我有一个类别“员工”,我希望能够以“hive_db.employee_some_other_random_name”格式保存从 RDBMS 提取的表
我有如下代码
我有下面第一张表的结果。相同的结果适用于其他表..
它没有将提取的数据框写入配置单元,而是打印列名
如何将 DF 写入配置单元表?
dataframe - spark jdbc - 到源的多个连接?
有人提到,当我们使用生成数据帧的 spark.read JDBC 时,如果我们在该数据帧上执行两次 df.write。**它会创建两个到源的连接吗?** 我需要一些帮助,以了解有关 spark 的内部工作原理的更多见解。
所以假设我创建了一个函数来返回一个 df
现在我将从上述函数返回的 df 写在两个地方。
现在,如果我如下在 main 中调用它,那真的会与源建立两个连接吗?如果是; 有什么方法可以避免这种情况并且只读一次。此处有关 spark for load 的文档引用 load() “从数据源加载数据并将其作为 a:class 返回DataFrame
。” 所以需要更多关于这里内部发挥作用的背景信息。