主要翻译自 官网 pyspark 2.3.1 文档
https://spark.apache.org/docs/2.3.1/api/python/pyspark.html#pyspark.RDD
输入RDD[(K,V)]形式数据,使用老的hadoop API接口存储在hdfs上数据;
内容需要被convert转化,默认转化器是 org.apache.spark.api.python.JavaToWritableConverter;
输入RDD[(K,V)]形式数据,使用老的hadoop API接口存储在hdfs上数据;
不同于上面的是可以自行推断数据类型进行转换,也可以指定压缩模式;
相对亦①使用新的hadoop API接口
相对②使用新的hadoop API接口
用pyspark.serializers.PickleSerializer序列化object对象,一次批默认10行
用org.apache.hadoop.io.Writable转化RDD的K/V
存为text文件,
compressionCodecClass可以使用:org.apache.hadoop.io.compress.GzipCodec
DataFrame.writer返回的是DataFrameWriter对象来进行写文件
df.write.format("parquet").mode('append').save(os.path.join(tempfile.mkdtemp(), 'data'))
本人推荐使用这种,想该模式,改写format参数即可,mode也可以改多种
缺点:传输的文件名只是个文件路径,不是单独一个文件,比如存为csv模式,去zeppelin的shell中查出需要使用
hdfs dfs -cat /tmp/spark/project/reults_1.csv/*
format : json、parquet、csv等
model:ovewriter重写、append文件末尾追加、error如果文件存在抛出异常、ignore如果文件存在忽略不更新
options
option:可是设置时区、时间等形式
partitionBy(*cols):可以按指定列去进行分区存储
df.write.partitionBy('year', 'month').parquet(os.path.join(tempfile.mkdtemp(), 'data'))
df.write.mode("overwrite").csv(os.path.join(tempfile.mkdtemp(), 'data'))
df.write.mode("overwrite").csv(“/tmp/spark/project/result_1.csv”)
存为csv文件
存到dataFrame保存过的表中,
通过jdbc存到表中,确保sparkContext、hiveContext、sqlContext等表之间可以互见,并且可以写入;
我记得由此能看到hive表,但是没法写进去。hive看不到spark中的表。
df.write.json(os.path.join(tempfile.mkdtemp(), 'data'))
存为json文件
orc_df = spark.read.orc('python/test_support/sql/orc_partitioned')
orc_df.write.orc(os.path.join(tempfile.mkdtemp(), 'data'))
文件通过orc序列化
df.write.parquet(os.path.join(tempfile.mkdtemp(), 'data'))
存为parquet文件
存为text文件
存成表结构,一般用于hiveContext与hive表结构连接存储;
bucketBy(numBuckets, col, *cols)[source]:按指定列分成多少块存储,用于saveAsTable
df.write.format('parquet').bucketBy(100, 'year', 'month').mode("overwrite").saveAsTable('bucketed_table')
sortBy(col, *cols) 按指定列排序与bucket使用
df.write.format('parquet').bucketBy(100, 'year', 'month').sortBy('day').mode("overwrite").saveAsTable('sorted_bucketed_table')