首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从远程mysql数据库(JDBC)的pySpark SQL写入中获取新行id

从远程mysql数据库(JDBC)的pySpark SQL写入中获取新行id
EN

Stack Overflow用户
提问于 2018-09-05 19:52:51
回答 1查看 446关注 0票数 2

我正在使用pyspark-sql在使用JDBC的远程mysql数据库中创建行。

我有两个表,parent_table(id, value)child_table(id, value, parent_id),因此parent_id的每一行在child_id中可以根据需要关联任意多的行。

现在,我想创建一些新数据并将其插入到数据库中。我使用的是write操作的代码指南here,但我希望能够做到以下几点:

代码语言:javascript
运行
复制
parentDf = sc.parallelize([5, 6, 7]).toDF(('value',))
parentWithIdDf = parentDf.write.mode('append') \
                         .format("jdbc") \
                         .option("url", "jdbc:mysql://" + host_name + "/"
                            + db_name).option("dbtable", table_name) \
                         .option("user", user_name).option("password", password_str) \
                         .save()
# The assignment at the previous line is wrong, as pyspark.sql.DataFrameWriter#save doesn't return anything.

我希望上面的最后一行代码能够返回一个DataFrame,其中包含每行的新行I,这样我就可以

代码语言:javascript
运行
复制
childDf = parentWithIdDf.flatMap(lambda x: [[8, x[0]], [9, x[0]]])
childDf.write.mode('append')...

这意味着最终我将在远程数据库中

代码语言:javascript
运行
复制
parent_table
 ____________
| id | value |
 ____________
| 1  |   5   |
| 2  |   6   |
| 3  |   7   |
 ____________

child_table
 ________________________
| id | value | parent_id |
 ________________________
| 1  |   8   |    1      |
| 2  |   9   |    1      |
| 3  |   8   |    2      |
| 4  |   9   |    2      |
| 5  |   8   |    3      |
| 6  |   9   |    3      |
 ________________________ 

正如我在上面的第一个代码片段中所写的,查看its documentation时,pyspark.sql.DataFrameWriter#save没有返回任何内容,那么我如何实现这一点呢?

我是不是做错了什么?看起来没有办法从Spark的操作中获取数据( save就是),虽然我想使用这个操作作为转换,但这让我认为我可能以错误的方式思考所有这些。

EN

回答 1

Stack Overflow用户

发布于 2018-09-06 06:25:25

一个简单的答案是使用时间戳+自动增量数字来创建唯一的ID。只有在一个时间实例上只有一台服务器在运行时,这才有效。:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52184502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档