0
私は、「スクリプト」フィールドの1つと新しい列のエントリとしての一致を検索することによって、Pysparkの既存のデータフレームに新しいcoulmnを作成します。Pyspark Dataframe TypeError:予期される文字列またはバッファ
import re as re
def sw_fix(data_str):
if re.compile(r'gaussian').search(data_str):
cleaned_str = 'gaussian'
elif re.compile(r'gromacs').search(data_str):
cleaned_str = 'gromacs'
else:
cleaned_str = 'ns'
return cleaned_str
sw_fix_udf = udf(sw_fix, StringType())
k=df.withColumn("software_new", sw_fix_udf(df.script))
コードが正常に実行され、正しい一致した新しい列にデータフレームkを生成し、しかし、私は上の任意の操作を行うことができません新しく追加された列
k.filter(k.software_new=='gaussian').show()
は、エラー、例外TypeError:期待される文字列またはバッファ。
IはStringTypeを示し、新たに追加されたカラム
f.dataType for f in k.schema.fields
のデータ型をchekced。
ただし、これは動作します。ここで、sw_appは元のデータフレームの既存の列です。
k.filter(k.sw_app=='gaussian').select('sw_app','software_new').show(5)
+--------+------------+
| sw_app|software_new|
+--------+------------+
|gaussian| gaussian|
|gaussian| gaussian|
|gaussian| gaussian|
|gaussian| gaussian|
|gaussian| gaussian|
+--------+------------+
software_newフィールドを処理できない理由についてのヒントはありますか?
私はあなたのサンプルデータを試してみましたが、うまくいきました。だから問題は私のデータフレームdfと仮定します。スクリプトフィールドはStringTypeであり、software_newフィールドもStringTypeです。私はsoftware_newフィールドにnon stringTypeを持たせることがどうして可能か理解していません。 – user3311147
ええ..何かがあなたのセットアップで台無しにされている必要があります..あなたはこの答えを受け入れることができます:) –