LoginSignup
1
0

More than 1 year has passed since last update.

【トリビアのDelta Lake】#8 Pysparkで、Dataframe内の値を省略せず全表示させたい

Posted at

Google ColabなどでPysparkを動かし、Dataframeの中身を確認したいとき。

show_dataframe.py
<dataframeの変数名>.show()

で見ることになりますが、カラム内の値が長いと、このように省略されてしまうことも。

show_dataframe_2.py
df_include_json = spark.createDataFrame([
        (1, '{"year": 2021,"rank":"junior"}'),
        (2, '{"year": 2022,"rank":"senior"}')],
    ["no", "value"]
)
>>>
+---+--------------------+
| no|               value|
+---+--------------------+
|  1|{"year": 2021,"ra...|
|  2|{"year": 2022,"ra...|
+---+--------------------+

なぜ、こうなってしまうのでしょうか?

df.show(truncate=False)

それは、sparkのshowメソッドが、デフォルトでは最大20文字までしか表示しないようにしているからです。

関係するのはtruncateという引数で、デフォルトではこれがTrueになっている。
値を全表示させたい場合は、truncateをFalseに設定してあげるだけでOKです。

show_all_values_in_dataframe.py

df_include_json = spark.createDataFrame([
        (1, '{"year": 2021,"rank":"junior"}'),
        (2, '{"year": 2022,"rank":"senior"}')
    ],
    ["no", "value"])

df_include_json.show(truncate=False)
>>>
+---+------------------------------+
|no |value                         |
+---+------------------------------+
|1  |{"year": 2021,"rank":"junior"}|
|2  |{"year": 2022,"rank":"senior"}|
+---+------------------------------+

ちなみに、Pandasの場合は?

DataframeといえばPandasですが、ここでも同様なことが起こるし、その対策方法はあります。

Pandasでは、Sparkがコマンドごとに設定を決めるのとは違い、その場のインタープリタ内での全てに設定を影響させるようです。

display_all_values_with_pandas.py
import pandas as pd 
pd.set_option("display.max_colwidth",<表示させたい最大の数字>)

とりあえず10000とかに設定すれば、大体の値は省略されずに表示できるのかなと。
ここの数値を大きく設定しすぎた場合の影響までは現時点で調べきれなかったので、また分かったら追記したいと思います。

このシリーズの目的

クラウドストレージに蓄積された生データ(CSV,JSON等)を加工するのに必要なPysparkの知識を溜めていく、まさにPysparkに関するトリビアのDalta Lakeを目指しています。
Pysparkに関する記事はまだ海外のものが多く、このシリーズが私のような国内の駆け出しデータエンジニアの一助になることを願っています。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0