以下不定时记录一些pyspark使用过程中的心得、备忘、注意事项等。
reduceByKey:
尽量使用reduceByKey来替代groupByKey, 用reduceByKey时先把数据整理成(key, value)对 (出于性能的考虑)coalesce:
coalesce(1)之前,尤其是存下来的文件比较大时,最好先count()一下读入文件:
多个文件路径用逗号’,’隔开就可以读,比如read.parquet(‘pathA,pathA’), textFile(‘pathA,pathA’)读入文件:
在读多个路径的parquet文件时,(似乎)以第一个读到的parquet文件的schema作为所有文件的schema,因此若多个路径下schema不一样,这样读取可能不大安全。在read多个文件时,也可以选择有read.option(‘mergeSchema’,’true’).parquet(‘path………’)的方式(应该不局限于parquet格式吧),可以合并schema,但是这个操作比较耗时。写入文件:
write的时候可以用overwrite选项,这样就不用先删掉已有目标路径下的文件了Schema:
df_name.columns可以返回一个list,其每个元素为df_name的一个字段,但是“fieldA.fieldA_1”这种字段不会出现在list中,只会出现“fieldA”Schema:
df_name.printSchema()可以打印出完整schemaRow:
row可以用xx[‘fieldA’]来获取列值, 也可以用asDict()变为dict,这样就可以遍历其中的字段了。DataFrame union:
两个df之间要union之前,记得把schema顺序对齐。解决方法:可以先对两个df分别select一下,确定字段顺序。repartition() :
给数据手动分区,可增加并行度rdd:
读入文件后可以用.rdd将不是rdd的转为rdd,当然可以先将自己需要的字段select出来再转