繁体   English   中英

如何将 MySQL 转储文件转换为数据帧

[英]How to convert MySQL dump file to dataframe

我目前正在处理 MySQL 转储到 Python 数据帧。 转储位于存储帐户中,可通过我们在 Databricks 中的安装点访问。 MySQL 实例没有可用的数据库连接。 互联网上的所有示例都主要集中在与 MySQL 数据库的连接上。

我的环境是带有 Python 的 Azure Databricks。 所以像这里这样在线的脚本不起作用,因为那个脚本专注于本地环境而不是存储在数据帧(笔记本电脑、PC)中。

我被困在为 SQL 插入创建数据框的过程中。 并专门为所有具有相同名称的表创建一个数据框,例如XX (见下文)。

我可以打开文件:

fd = open(source, 'r')
data = fd.read()
fd.close()

我的 SQL INSERT INTO 脚本是这样的。 在一个文件中多个 INSERT INTO 语句,有时针对相同的表(参见示例XXYZ ),但对于其他不同的表,参见( YYZZ

(模拟此示例数据):

INSERT INTO `XX` (`id`, `a`, `b`, `clientId`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`, `updateTime`, `n`, `o`, `p`) VALUES (54321,20,0,12345,12345,'2021-02-08 09:03:01',12345,'scope',40,20,NULL,0,0,'access-scope',1443,'2021-02-08 09:03:26','webservices',0,0),(1510000000000005,10,0,12345,12345,'2021-02-08 09:03:01',12345,'grant',40,20,NULL,0,0,'yes',1443,'2021-02-08 09:03:10',NULL,54321,0);

INSERT INTO `XX` (`id`, `a`, `b`, `clientId`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`, `updateTime`, `n`, `o`, `p`) VALUES (54320,20,0,12346,12346,'2021-02-08 09:03:01',12346,'scope',40,20,NULL,0,0,'access-scope',1443,'2021-02-08 09:03:26','webservices',0,0),(1510000000000005,10,0,12346,12346,'2021-02-08 09:03:01',12346,'grant',40,20,NULL,0,0,'yes',1443,'2021-02-08 09:03:10',NULL,54320,0);

INSERT INTO `YY` (`id`, `a`, `b`, `clientId`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`, `updateTime`, `n`, `o`, `p`) VALUES (54320,20,0,12346,12346,'2021-02-08 09:03:01',12346,'scope',40,20,NULL,0,0,'access-scope',1443,'2021-02-08 09:03:26','webservices',0,0),(1510000000000005,10,0,12346,12346,'2021-02-08 09:03:01',12346,'grant',40,20,NULL,0,0,'yes',1443,'2021-02-08 09:03:10',NULL,54320,0);

INSERT INTO `YZ` (`id`, `a`, `b`, `clientId`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`, `updateTime`, `n`, `o`, `p`) VALUES (54320,20,0,12346,12346,'2021-02-08 09:03:01',12346,'scope',40,20,NULL,0,0,'access-scope',1443,'2021-02-08 09:03:26','webservices',0,0),(1510000000000005,10,0,12346,12346,'2021-02-08 09:03:01',12346,'grant',40,20,NULL,0,0,'yes',1443,'2021-02-08 09:03:10',NULL,54320,0);

INSERT INTO `YZ` (`id`, `a`, `b`, `clientId`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`, `updateTime`, `n`, `o`, `p`) VALUES (54320,20,0,12346,12346,'2021-02-08 09:03:01',12346,'scope',40,20,NULL,0,0,'access-scope',1443,'2021-02-08 09:03:26','webservices',0,0),(1510000000000005,10,0,12346,12346,'2021-02-08 09:03:01',12346,'grant',40,20,NULL,0,0,'yes',1443,'2021-02-08 09:03:10',NULL,54320,0);

INSERT INTO `ZZ` (`id`, `a`, `b`, `clientId`, `c`, `d`, `e`, `f`, `g`, `h`, `i`, `j`, `k`, `l`, `m`, `updateTime`, `n`, `o`, `p`) VALUES (54320,20,0,12346,12346,'2021-02-08 09:03:01',12346,'scope',40,20,NULL,0,0,'access-scope',1443,'2021-02-08 09:03:26','webservices',0,0),(1510000000000005,10,0,12346,12346,'2021-02-08 09:03:01',12346,'grant',40,20,NULL,0,0,'yes',1443,'2021-02-08 09:03:10',NULL,54320,0);

我设法在数据帧中以一种不执行的方式获得了这个,但是每个查询都是一个数据帧。 如何从一个表中的所有查询(如一个数据框中的XX以及来自XYXZ所有表在一个单独的表中获取)? 这样我得到一个 DF 用于XX ,一个用于XY ,一个用于XZ 我想这将大大加快我的表现。

请使用以下脚本将带有INSERT INTO mysqldump 文件转换为 csv 文件: https : //github.com/yashsmehta/mysqldump-to-csv

不仅仅是将 csv 加载到数据帧中,例如:

df_XX = spark.read.format("csv").load("/your_mount/XX.csv") 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM