[英]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 语句,有时针对相同的表(参见示例XX
和YZ
),但对于其他不同的表,参见( YY
和ZZ
)
(模拟此示例数据):
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
以及来自XY
、 XZ
所有表在一个单独的表中获取)? 这样我得到一个 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.