この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、CX事業本部の若槻です。
Apache Sparkは、大規模なデータを処理するための統合分析エンジンです。
今回は、SparkのDataFrameをshow()
メソッドでコンソール表示する際に、長い値が省略されないようにする方法を確認してみました。
環境
% pyspark --version
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.apache.spark.unsafe.Platform (file:/usr/local/Cellar/apache-spark/3.0.1/libexec/jars/spark-unsafe_2.12-3.0.1.jar) to constructor java.nio.DirectByteBuffer(long,int)
WARNING: Please consider reporting this to the maintainers of org.apache.spark.unsafe.Platform
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 3.0.1
/_/
Using Scala version 2.12.10, OpenJDK 64-Bit Server VM, 11.0.9
Branch HEAD
Compiled by user ubuntu on 2020-08-28T08:58:35Z
Revision 2b147c4cd50da32fe2b4167f97c8142102a0510d
Url https://gitbox.apache.org/repos/asf/spark.git
Type --help for more information.
解決したいこと
下記のようなSpark DataFrameオブジェクトがあります。
% pyspark
>>> df = spark.createDataFrame(
[
('7d4215d0-ab05-4372-9681-b41f925e3458', 0, 1608976046746),
('e36b7dfa-5327-4e33-a6cf-a34d6ce2027d', 1, 1608976059078),
('3ff9c44a-2a66-49df-bb70-0df07a749a61', 1, 1608976150001)
],
['device_id', 'state', 'timestamp']
)
このDataFrameオブジェクトはshow()
メソッドを実行することにより内容をコンソール表示させることができます。しかし、下記のように長い値だと...
のように表示が省略されてしまいます。
>>> df.show()
+--------------------+-----+-------------+
| device_id|state| timestamp|
+--------------------+-----+-------------+
|7d4215d0-ab05-437...| 0|1608976046746|
|e36b7dfa-5327-4e3...| 1|1608976059078|
|3ff9c44a-2a66-49d...| 1|1608976150001|
+--------------------+-----+-------------+
このように長い値を省略させずにすべて表示させたいです。
省略させない方法
Apache Sparkのドキュメントを確認すると、show()
メソッドにはtruncate
というオプションがあるようです。
truncate
オプションの既定値はTrue
で、文字数が最大20文字となるようです。
- truncate – If set to True, truncate strings longer than 20 chars by default. If set to a number greater than one, truncates long strings to length truncate and align cells right.
また下記によると値をFalse
とすれば省略されなくなるようです。
show(truncate=False)
として実行したところ、値を省略せずに表示できました。
>>> df.show(truncate=False)
+------------------------------------+-----+-------------+
|device_id |state|timestamp |
+------------------------------------+-----+-------------+
|7d4215d0-ab05-4372-9681-b41f925e3458|0 |1608976046746|
|e36b7dfa-5327-4e33-a6cf-a34d6ce2027d|1 |1608976059078|
|3ff9c44a-2a66-49df-bb70-0df07a749a61|1 |1608976150001|
+------------------------------------+-----+-------------+
その他の便利なオプション
n
オプションを使えば、表示するレコード数を指定できます。すべてのレコードを表示する必要がない場合に便利です。
>>> df.show(n=1)
+--------------------+-----+-------------+
| device_id|state| timestamp|
+--------------------+-----+-------------+
|7d4215d0-ab05-437...| 0|1608976046746|
+--------------------+-----+-------------+
only showing top 1 row
vertical
オプションを使えば、レコードを縦に表示できます。カラム数が多い場合に便利です。
>>> df.show(vertical=True)
-RECORD 0-------------------------
device_id | 7d4215d0-ab05-437...
state | 0
timestamp | 1608976046746
-RECORD 1-------------------------
device_id | e36b7dfa-5327-4e3...
state | 1
timestamp | 1608976059078
-RECORD 2-------------------------
device_id | 3ff9c44a-2a66-49d...
state | 1
timestamp | 1608976150001
truncate
オプションと組み合わせることももちろん可能です。
>>> df.show(truncate=False, vertical=True)
-RECORD 0-----------------------------------------
device_id | 7d4215d0-ab05-4372-9681-b41f925e3458
state | 0
timestamp | 1608976046746
-RECORD 1-----------------------------------------
device_id | e36b7dfa-5327-4e33-a6cf-a34d6ce2027d
state | 1
timestamp | 1608976059078
-RECORD 2-----------------------------------------
device_id | 3ff9c44a-2a66-49df-bb70-0df07a749a61
state | 1
timestamp | 1608976150001
おわりに
SparkのDataFrameをshow()
メソッドでコンソール表示する際に、長い値が省略されないようにする方法を確認してみました。
show()
メソッドはSparkのコードのデバッグで多用するので覚えておきたいですね。
以上