目录
pyspark连接mysql
前提是需要下载jar包。
Mysql-connector-java.jar
from pyspark import SparkContext
from pyspark.sql import SQLContext
import pyspark.sql.functions as F
sc = SparkContext("local", appName="mysqltest")
sqlContext = SQLContext(sc)
df = sqlContext.read.format("jdbc").options(
url="jdbc:mysql://localhost:3306/mydata?user=root&password=mysql&"
"useUnicode=true&characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&"
"useLegacyDatetimeCode=false&serverTimezone=UTC ", dbtable="detail_data").load()
df.show(n=5)
sc.stop()
pyspark SQL常用语法
pyspark SQL的部分语法和pandas的很相似。
输出schema
df.printSchema()
# root
# |-- id: integer (nullable = true)
# |-- 省份: string (nullable = true)
预览表
df.show(n=5)
# +----+------+------+------+------+
# | id| 省份| 城市| 区县| 区域|
# +----+------+------+------+------
# |2557|广东省|深圳市|罗湖区|春风路
# ...
统计数量
print(df.count())
# 47104
输出列名称和字段类型
print(df.columns)
# ['id', '省份', '城市', '区县', '区域', '小区', '源地址',...
print(df.dtypes)
# [('id', 'int'), ('省份', 'string'), ('城市', 'string'),...
选择列
df.select('城市', '区县', '区域', '小区').show()
# +------+------+------+--------------+
# | 城市| 区县| 区域| 小区|
# +------+------+------+--------------+
# |深圳市|罗湖区|春风路| 凯悦华庭|
# |深圳市|罗湖区|春风路| 置地逸轩|
# ...
为选择的列赋予新名称
可以看到有两种方式来对指定列做操作:
- 列名称是英文的话,直接在df后面用点号调用
- 列名称非英文,可以在后面用中括号调用
df.select(df.id.alias('id_value'), '小区'