[pyspark] pyspark使用记录

以下不定时记录一些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()可以打印出完整schema

  • Row:
    row可以用xx[‘fieldA’]来获取列值, 也可以用asDict()变为dict,这样就可以遍历其中的字段了。

  • DataFrame union:
    两个df之间要union之前,记得把schema顺序对齐。解决方法:可以先对两个df分别select一下,确定字段顺序。

  • repartition() :
    给数据手动分区,可增加并行度

  • rdd:
    读入文件后可以用.rdd将不是rdd的转为rdd,当然可以先将自己需要的字段select出来再转

你可能感兴趣的:(spark)