SparkSQL统一API写出DataFrame数据
统一API语法:
df.write.mode().format().option(K,V).save(PATH)
- mode,传入模式字符串可选:append追加,overwrite覆盖,ignore忽略,error重复就报异常(默认的)
- format,传入格式字符串,可选:text,csv,json,parquet,orc,avro,jdbd
- 注意text源只支持单列df写出,也就是数据写出来只有一列
- option设置属性,如:.option("sep", ","),像保存csv时就可以指定它的分隔符
- save写出的路径,支持本地文件和HDFS
python
coding:utf8
import ...
if __name__ == '_main__':
#O.构建执行环境入口对象SparkSession
spark = SparkSession.builder.\
appName("test").\
master("local[*]").\
config("spark.sql.shuffle.partitions", 2).\
getorcCreate()
sc = spark.sparkContext
#1.读取数据集
schema = StructType().add("user_id",StringType(),nullable=True).\
add("movie_id",IntegerType(),nullable=True).
add("rank",IntegerType(),nullable=True).
add("ts",StringType),nullable=True)
df = spark.read.format("csv").\
option("sep","\t").\
option("header",False).\
option("encoding","utf-8").\
schema(schema=schema).\
Load("../data/input/sql/u.data")
#Write text写出,只能写出一个列的数据,需要将df转换为单列df
#这里用F对象里的concat_ws函数,指定---分隔,连接指定的字段
df.select(F.concat_ws("---","user_id","movid_id","rank","ts")).\
write.\
mode("overwrite").\
format("text").\
save("../data/output/sql/text")
# Write csv
df.write.mode("overwrite").\
format("csv").\
option("sep", ";").
option("header", True).\
save("../data/output/sql/csv")
# Write json
df.write.mode("overwrite").\
format("json").\
save("../data/output/sql/json")
# Write parquet
df.write.mode("overwrite").\
format("parqeut").\
save("../data/output/sql/parquet")