4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SPSS Modeler 18.2.2以降で既存ファイルにレコード追加の際にサイズが2GBを超える場合の回避策

Last updated at Posted at 2024-01-15

SPSS Modeler 18.2まではフラットファイルの追加出力時に特に制限はありませんでしたが、18.2.2以降は2GBを超える場合に元のデータが削除されてしまう制限があります。
これは、Modeler18.2.2以降で使用しているICU4Cライブラリーに制限のためです。

この制限をPySparkの拡張ノードをつかって回避する方法を考えました。

  • サンプルストリーム

  • テスト環境
    • Modeler 18.4
    • Windows 11 64bit

1. PySpark拡張ノードを使った既存ファイルにレコード追加

「拡張のエクスポートノード」に以下を入力して実行します。

image.png

既存ファイルにレコード追加
#ファイル名
filename='C:/temp/modelertmp2/2G.csv'

import spss.pyspark.runtime
ascontext = spss.pyspark.runtime.getContext()

import numpy
import pandas as pd
import csv

indf = ascontext.getSparkInputData()
df=indf.toPandas()
# Appendモードで出力。文字列はダブルクォートで囲む。index列とヘッダー行は出力しない。
df.to_csv(filename, quoting=csv.QUOTE_NONNUMERIC,mode='a', header=False, index=False)

以下で追加先のファイル名を指定しています。環境にあわせて修正してください。この部分をカスタムノード化してしまうのもよいと思います。

filename='C:/temp/modelertmp2/2G.csv'

2.テスト実行

データは以下のような2GBのデータを用意しています。
image.png

image.png

「拡張のエクスポートノード」を実行すると1MB増えています。
image.png

最後の2行を確認すると確かに1MBのデータが一行追加されています。
image.png

3.制限の確認

既存ファイルにレコード追加の際にファイルサイズが2GBを超える場合に元データが削除される制限を確認してみます。
通常の「フラットファイルのエクスポートノード」で「レコード追加」してみます。

image.png

ファイルのサイズが2GBあったものが1MBになってしまいました。

image.png

追加した1MBのデータだけになっていることがわかります。
image.png

なお、Modeler18.5ではメッセージが出力され実行が中断するように修正されています。
image.png

4. 日付型、タイムスタンプ型、時間型の注意

pandasのDataFrameにした際に日付型、タイムスタンプ型、時間型はうシリアル値になります。ですので、以下のような変換などをする必要があります。

シリアル値から日付型への変換
df['ds'] = pd.to_datetime('1970/1/1') + pd.to_timedelta(df['ds'] , unit='days')

参照

エクスポート[フラットファイル]ノードの保存モード[レコード追加]のファイルサイズの制限について

4
2
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
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?