■ はじめに
https://dk521123.hatenablog.com/entry/2020/01/04/150942
https://dk521123.hatenablog.com/entry/2020/05/18/154829
https://dk521123.hatenablog.com/entry/2020/07/02/000000
の続き。 調査する際に PySpark の DataFrame の show()などを使うのだが その際に、結構、忘れてしまうので、ここでメモっておく。
目次
【0】API仕様 【1】項目を絞って表示させたい場合 【2】条件を絞って表示させたい場合 【3】値を省略させずに表示させたい場合 【4】表示行数を増やしたい場合 【5】ソート順に並べて表示する 【6】レコードを縦に表示したい場合 【7】RDDに対してデバッグログ表示したい場合
【0】API仕様
* 以下を参照
https://spark.apache.org/docs/latest/api/python/reference/api/pyspark.sql.DataFrame.show.html
DataFrame.show(n=20, truncate=True, vertical=False)
サンプル
from pyspark import SparkContext from pyspark.sql import SparkSession from pyspark.sql.types import StructType from pyspark.sql.types import StructField from pyspark.sql.types import StringType spark_context = SparkContext() spark = SparkSession(spark_context) rdd = spark_context.parallelize([ ('x0001', 'Mike', 'Sales'), ('x0002', 'Tom', 'IT'), ('x0003', 'Sam', 'Sales'), ('x0004', 'Kevin', 'Human resources'), ('x0005', 'Bob', 'IT'), ('x0006', 'Alice', 'Banking'), ('x0007', 'Carol', 'IT'), ]) schema = StructType([ StructField('id', StringType(), False), StructField('name', StringType(), False), StructField('job', StringType(), False), ]) data_frame = spark.createDataFrame(rdd, schema) # 表示 data_frame.show(n=5, truncate=False, vertical=True)
出力結果
-RECORD 0--------------- id | x0001 name | Mike job | Sales -RECORD 1--------------- id | x0002 name | Tom job | IT -RECORD 2--------------- id | x0003 name | Sam job | Sales -RECORD 3--------------- id | x0004 name | Kevin job | Human resources -RECORD 4--------------- id | x0005 name | Bob job | IT only showing top 5 rows
【1】項目を絞って表示させたい場合
* select() + show() を使う
サンプル
# 項目を絞って表示 data_frame.select("name").show() # 複数で絞りたい場合 data_frame.select("id", "name").show()
【2】条件を絞って表示させたい場合
* filter() + show() を使う
サンプル
# WHERE的に条件で絞る data_frame.filter(data_frame["name"] == "Mike").show()
【3】値を省略させずに表示させたい場合
* デフォルト表示の場合、日時や長い文字列を表示した場合、 「...」になるので、その表示方法を記す +--------------------+ | col| +--------------------+ |2015-11-16 07:15:...| +--------------------+
サンプル
# cf. truncate = 切り捨てる data_frame.show(truncate=False)
【4】表示行数を増やしたい場合
サンプル
# デフォルト 20行 の表示を 30行 に増やしたい場合 data_frame.show(n=30) # data_frame.show(30)
【5】ソート順に並べて表示する
* 必ずしもID順に表示される訳ではないので確認時に大変
解決案
* OrderBy を使う。(e.g. data_frame.orderBy(col('id').desc()).show()) ⇒ サンプルなどは、以下の関連記事を参照のこと
https://dk521123.hatenablog.com/entry/2020/01/04/150942
参考文献
http://sinhrks.hatenablog.com/entry/2015/04/29/085353
【6】レコードを縦に表示したい場合
* おまけとして、verticalについて書いておく => vertical=True でレコードを縦に表示する
サンプル
data_frame.show(vertical=True)
【7】RDDに対してデバッグログ表示したい場合
おまけ的に。。。 以下に記載されているものを参考に。
https://stackoverflow.com/questions/25295277/view-rdd-contents-in-python-spark
サンプル
# n : 表示させたいインデックス(1とか2とか) print(rdd.take(n)) # あくまで、障害時のデバッグログとして(通常のログには使わないこと!) print(rdd.collect()) # collect() に関する弊害は、以下の関連記事を参照のこと
https://dk521123.hatenablog.com/entry/2021/04/22/131849
参考文献
関連記事
PySpark ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2019/11/14/221126
PySpark ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2021/04/03/004254
PySpark ~ DataFrame / データ操作編 ~
https://dk521123.hatenablog.com/entry/2020/01/04/150942
PySpark ~ DataFrame / テーブル・項目操作編 ~
https://dk521123.hatenablog.com/entry/2020/05/18/154829
PySpark ~ DataFrame / 項目数を取得するには ~
https://dk521123.hatenablog.com/entry/2020/08/28/183706
PySpark ~ PySpark経由でDBに接続する ~
https://dk521123.hatenablog.com/entry/2020/07/02/000000
PySpark ~ CSV / Read/Writeのプロパティ ~
https://dk521123.hatenablog.com/entry/2020/07/30/195226
PySpark ~ CSV / escape 編 ~
https://dk521123.hatenablog.com/entry/2020/11/23/224349
PySpark ~ エスケープされた区切り文字が含んだデータを扱う ~
https://dk521123.hatenablog.com/entry/2020/07/09/000832
AWS Glue ~ DynamicFrame ~
https://dk521123.hatenablog.com/entry/2021/12/14/221043