Ubuntu命令行使用mysql插入、查询、另存为文件等操作。

一、实验目的

(1)通过实验掌握Spark SQL的基本编程方法;

(2)熟悉RDD到DataFrame的转化方法;

(3)熟悉利用Spark SQL管理来自不同数据源的数据。

二、实验平台

操作系统:Ubuntu16.04

Spark版本:2.4.0

数据库:MySQL

Python版本:3.4.3

三、实验过程

Spark中级编程实践

将sakila的相关表rental导入到MySQL数据库中;

采用Spark编程实现下列操作:

  1. 查询所有数据,并保存成为文本文件;

在windows中使用navicat转储rental表的结构和数据,将sql文件存入虚拟机,在mysql中使用语句:SOURCE /usr/local/rental.sql;导入mysql中,得到表。

使用下面语句展示路径,因为转为txt文件必须到这个路径下。

错误 mysqldump: Got error: 1290: The MySQL server is running with the --secure-file-priv option so it cannot execute this statement when executing 'SELECT INTO OUTFILE' 表示由于 MySQL 服务器启用了 --secure-file-priv 选项,限制了 mysqldump 可以写入文件的目录。

这个选项通常用于安全目的,防止MySQL将数据导出到服务器上的任意位置。当启用时,mysqldump 和 LOAD DATA INFILE 等操作只能对 --secure-file-priv 指定的目录中的文件进行操作。

要解决这个问题,您可以采取以下步骤:

确认 --secure-file-priv 的值:

首先,您需要确认 --secure-file-priv 系统的变量值。在MySQL命令行中,使用以下命令:

SHOW VARIABLES LIKE 'secure_file_priv';

使用下面语句:select *  into outfile '/var/lib/mysql-files/outputfile.txt' from rental;。保存为txt文本。

查看结果:

有一个问题是使用语句“hadoop@dblab-VirtualBox:~$ sudo cd /var/lib/mysql-files/ sudo: cd:找不到命令”,因为:

在 Linux 系统中,sudo 命令用于以另一个用户(通常是超级用户,即 root 用户)的权限来执行命令。然而,sudo 不能用于修改当前 shell 的工作目录,因为工作目录是 shell 的一个环境变量,而不是一个需要提升权限才能执行的命令。

要解决您遇到的权限问题,您应当使用 sudo 来执行涉及 /var/lib/mysql-files/ 目录的相关命令,而不是尝试用 sudo cd。以下是一些您可以使用的命令:

列出目录内容:

sudo ls /var/lib/mysql-files/

查看文件内容:

sudo cat /var/lib/mysql-files/outputfile.txt

使用文本编辑器查看或编辑文件:

sudo nano /var/lib/mysql-files/outputfile.txt

查看结果如下:

2.查询所有数据,并去除重复的数据;

使用语句:select dinstinct * from rental;

结果如下:

3.查询所有的rential_id,rental_date,inventory_id,customer_id,并保存成为json文件;

使用语句:“select rental_id,rental_date,inventory_id,customer_id  into outfile '/var/lib/mysql-files/outputfile.json' from rental;

Query OK, 16044 rows affected (0.01 sec) “

结果如下:

4.筛选出rental_date>2005-05-26 00:00:00的记录;

使用语句:“SELECT * FROM rental WHERE rental_date > '2005-05-26 00:00:00';

结果如下:

5.将数据按customer_id分组;

使用语句:“SELECT

    customer_id,

    COUNT(rental_id) AS rental_count,

    MIN(rental_date) AS earliest_rental_date,

    MAX(rental_date) AS latest_rental_date

FROM rental

GROUP BY customer_id;”

结果如下:

6.将数据按customer_id分组,并统计每个customer_id总的借阅次数;

使用语句:“SELECT customer_id, COUNT(*) AS total_rentals

FROM rental

GROUP BY customer_id;”

结果如下:

7. 将数据按inventory_id分组,并统计每个inventory_id总的借阅次数;

使用语句:“SELECT inventory_id, COUNT(*) AS total_rentals

FROM rental

GROUP BY inventory_id;”

结果如下:

8. 将数据按customer_id和rental_date中的年份分组,并统计每个customer_id在每个年份总的借阅次数;

使用语句:“SELECT customer_id, YEAR(rental_date) AS rental_year, COUNT(*) AS total_rentals

FROM rental

GROUP BY customer_id, rental_year;”

结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值