しながら書いているので網羅的でないのはご容赦を。pythonは3.6以降を利用することを想定。csv形式1(単一のファイルの場合。そもそもあまりない状況だと思うが...。使うと処理が遅くなる。一つのワーカーノードに収まらないデータ量のDataFrameに対して実行するとメモリ不足になれば処理が落ちる(どちらもsparkが分散処理基盤であることを考えれば当たり前といえば当たり前だが)。現在のパーティション数より多い数も設定できる。分析に必須のwindow関数も書いておく。この例は、window内の次のtimestampを新しい列として格納するための処理。'na_colA'と'na_colB'を0埋めする。カラム名はsubsetで渡す。subsetは辞書形式でも渡せる。na_colAは"A"埋め、na_colBは"B"埋めする。DataFrameの値をpythonオブジェクトにする後段でやりたい処理のためにFor文に突っ込んだり、カテゴリ変数のユニークな値をサクッと確認したりに便利なやつ。現在、sparkのpythonUDFはパフォーマンスの面でspark標準の関数に劣るため使用は推奨されない。UDFはpandasのDataFrame-likeにvectrizedされた状態で渡されるので、通常のUDFに比べて処理が速い。関数の中身の記述方法は基本的には変わらないが、pandasベースの処理が使えたりもする。返り値にSeriesの値を指定できる。medianを算出する2018年8月現在、pyspark.sqlモジュールには、medianがないのでUDFで実装する必要がある。float(med)df.groupBy('user_category').agg(udf_median(collect_list('cnt')).alias('median_cnt'))おまけ:UDFに複数カラムのデータを渡す複数列の結果を使ってUDF内で演算したい時に、UDFにそのままカラムのリストを渡すと怒られるので、例えばstruct()を使うことで回避できる。requestStockLike59@paulxllデータ分析周りのなんでも屋。だいたい日々の技術メモ。upLoginユーザーは見つかりませんでした。