spark有3种数据结构——RDD、DataFrame、DataSet。这里展示的文件读写方式,都是针对dataFrame数据结构的,也就是文件读进来之后,是一个spark dataFrame。
0、首先连接spark
from pyspark.sql import SparkSession
spark=SparkSession \
.builder \
.appName('my spark task') \
.getOrCreate()
1、读写hdfs上的文件
SparkSession在读取【hdfs上文件】的时候,可以指定读取文件的格式,支持的文件格式有json, parquet, jdbc, orc, libsvm, csv, text。
1.1 读写hdfs上的文件 ——> 读写csv、json、text文件
【读取】:按照csv文件格式,读取文件
其余的文件格式只需将csv变成相应的文件格式名称即可
from pyspark.sql.types import IntegerType, DoubleType, StringType, StructType, StructField
file_path = r"/user/lanyue/data.csv"
schema = StructType([
StructField("column_1", StringType(), True),
StructField("column_2", StringType(), True),
StructField("column_3", StringType(), True),
])
df = spark.read.format("csv").load(file_path, header=True, inferSchema=True, encoding="utf-8", sep=',')
df = spark.read.format("csv").option("encoding","utf-8").option("header",True).load(file_path, schema=schema)
df = spark.read.csv(file_path, encoding='utf-8', header=True, inferSchema=True)
df = spark.read.csv(file_path, encoding='utf-8', header=True, schema=schema)
【保存】:以csv文件的格式保存,注意:是保存在hdfs上,不是保存在本地
其余的文件格式只需将csv变成相应的文件格式名称即可
df.write.mode('append').format("csv").repartition(1).option("encoding","utf-8").option("header",True).save("/lanyue/data.csv")
df.write.csv("/lanyue/data.csv", sep="\t", encoding="utf-8", mode='overwrite')
df = df.toPandas()
df.to_csv(r"data.csv", encoding="utf-8", index=None, header=True)
1.2 读写hdfs上的文件 ——> 按照指定分隔符来读取文件
有的时候,文件中的数据,其分隔符是自定义的,如何指定分隔符来读取文件呢?
可以使用读取csv的格式来读,虽然文件不是csv格式,但是通过spark.read.format(“csv”)的api指定分隔符,从而实现指定分隔符来读取文件的目的。
df = spark.read.format("csv").load(file_path, header=True, inferSchema=True, encoding="utf-8", sep=',')
1.3、读写hdfs上的文件 —— 读写hive中的表
hive中的表,其本质上,也是保存在hdfs上的文件,其文件格式是orc或者parquet
【读】:从hive表中读取数据
df = spark.sql("select * from hive_table_name")
df.show()
【写】:保存成hive表
df.write.format("orc").mode("append").partitionBy("dt").saveAsTable(table_name)
spark.sql = """
insert overwrite table databases.hive_table_name_2
partition (saledate)
select *
from databases.hive_table_name_1
"""
1.4 读写hdfs上的文件 —— 读写mysql中的表
在这里插入代码片
|