从0开始学pyspark(六):数据读写

详细看官网:http://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.DataFrameReader

读取本地或hdfs上文件


from pyspark.sql import SparkSession
#创建session
spark = SparkSession.builder.appName('read_write').master('local').getOrCreate()
#读取本地path的文件 前加 file:// hdfs上的文件加 :hdfs://
#由于文件编码为gbk,使用gbk编码读取文件
#header默认为false,这里我们的表有表头,将header改为true这保留表头
df = spark.read.csv('file:///home/ffzs/python-projects/learn_spark/stock.csv',encoding='gbk',header=True)
 #不设置属性的话,所有列的属性都是string
df.dtypes
[('日期', 'string'),
 ('股票代码', 'string'),
 ('名称', 'string'),
 ('收盘价', 'string'),
 ('最高价', 'string'),
 ('最低价', 'string'),
 ('开盘价', 'string'),
 ('前收盘', 'string'),
 ('涨跌额', 'string'),
 ('涨跌幅', 'string'),
 ('换手率', 'string'),
 ('成交量', 'string'),
 ('成交金额', 'string'),
 ('总市值', 'string'),
 ('流通市值', 'string')]

对于属性的问题,可以使用schema自己设置,也可以使用inferSchema自动识别。

# 使用inferSchema识别
df = spark.read.csv('file:///home/ffzs/python-projects/learn_spark/stock.csv',encoding='gbk',header=True, inferSchema=True)
#看一下类型
df.dtypes
[('日期', 'timestamp'),
 ('股票代码', 'string'),
 ('名称', 'string'),
 ('收盘价', 'double'),
 ('最高价', 'double'),
 ('最低价', 'double'),
 ('开盘价', 'double'),
 ('前收盘', 'double'),
 ('涨跌额', 'string'),
 ('涨跌幅', 'string'),
 ('换手率', 'double'),
 ('成交量', 'int'),
 ('成交金额', 'double'),
 ('总市值', 'double'),
 ('流通市值', 'double')]

写入本地或hdfs上文件

#在hdfs上创建目录
$ hadoop dfs -mkdir hdfs:///user/csv
#将数据写入到hdfs上
df.write.csv(path='hdfs:///user/csv/stock.csv', header=True, sep=",", mode='overwrite')

成功写入:
在这里插入图片描述

使用 jdbc 读写到数据库(以mysql为例)

读取:

# 使用jdbc读取mysql上数据 database=test, table=mashroom; user=root;password=666666
df0 = spark.read.jdbc(url="jdbc:mysql://localhost:3306/test?user=root&password=666666", table="mashroom")
# 查看数据行数
df0.count()
>>8124

写入:

# 编码,创建数据库 等参照jdbc url 的写法
df0.write.jdbc(url="jdbc:mysql://localhost:3306/test?user=root&password=666666&useUnicode=true&characterEncoding=GBK",
              mode="overwrite",
              table="test",
              properties={"driver":'com.mysql.jdbc.Driver'})

写入成功:

在这里插入图片描述

读写hive数据

读取:

# 读取hive要加enableHiveSupport(),以可以使用hql对hive进行操作
spark = SparkSession.builder.enableHiveSupport().master("local[*]").appName("read_hive").getOrCreate()
df=spark.sql("select * from age")
df.show()
+--------------+------+
|       country|median|
+--------------+------+
|   New Zealand|  39.0|
|         Spain|  37.0|
|       Ireland|  35.0|
|        Sweden|  34.0|
|         Italy|  34.0|
|        Norway|  34.0|
|       Denmark|  34.0|
|        Israel|  34.0|
|     Australia|  34.0|
|   Netherlands|  34.0|
|     Argentina|  33.5|
|        Canada|  33.5|
|       Belgium|  33.0|
|   Switzerland|  33.0|
|         Japan|  33.0|
|United Kingdom|  33.0|
| United States|  32.0|
|      Portugal|  32.0|
|       Romania|  32.0|
|       Germany|  31.0|
+--------------+------+
only showing top 20 rows

写入:

# 创建表格
spark.sql('create table if not exists age2(name string, num int)')
# 将dataframe写入表格
df.write.mode("overwrite").insertInto("age2")
# 验证写入数据
spark.sql('select * from age2 sort by num limit 10 ').show()
+-----------+---+
|       name|num|
+-----------+---+
|New Zealand| 39|
|      Spain| 37|
|    Ireland| 35|
|     Sweden| 34|
|      Italy| 34|
|     Norway| 34|
|    Denmark| 34|
|     Israel| 34|
|  Australia| 34|
|Netherlands| 34|
+-----------+---+
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页