文字列のリストを返すudfがあります。これは難しくありません。 udfを実行するときに、文字列の配列ArrayType(StringType)
を返すため、データ型を渡します。
さて、どういうわけかこれは機能していません:
私が操作しているデータフレームはdf_subsets_concat
そして次のようになります。
df_subsets_concat.show(3,False)
+----------------------+
|col1 |
+----------------------+
|oculunt |
|predistposed |
|incredulous |
+----------------------+
only showing top 3 rows
そしてコードは
from pyspark.sql.types import ArrayType, FloatType, StringType
my_udf = lambda domain: ['s','n']
label_udf = udf(my_udf, ArrayType(StringType))
df_subsets_concat_with_md = df_subsets_concat.withColumn('subset', label_udf(df_subsets_concat.col1))
結果は
/usr/lib/spark/python/pyspark/sql/types.py in __init__(self, elementType, containsNull)
288 False
289 """
--> 290 assert isinstance(elementType, DataType), "elementType should be DataType"
291 self.elementType = elementType
292 self.containsNull = containsNull
AssertionError: elementType should be DataType
これが正しい方法であったことは私の理解です。ここにいくつかのリソースがあります: pySpark Data Frames "assert isinstance(dataType、DataType)、" dataType should be DataType "PySparkのUDFで「タプルタイプ」を返す方法は?
しかし、これらのどちらも、なぜこれが機能しないのかを解決する助けにはなりませんでした。 pyspark 1.6.1を使用しています。
文字列の配列を返すpysparkでudfを作成する方法は?
StringType
インスタンスを初期化する必要があります。
label_udf = udf(my_udf, ArrayType(StringType()))
# ^^
df.withColumn('subset', label_udf(df.col1)).show()
+------------+------+
| col1|subset|
+------------+------+
| oculunt|[s, n]|
|predistposed|[s, n]|
| incredulous|[s, n]|
+------------+------+