web-dev-qa-db-ja.com

ArrayTypeを含むPysparkスキーマの作成

新しいDataFrameのスキーマを作成しようとしていますが、角かっことキーワードのさまざまな組み合わせを試しましたが、これを機能させる方法を理解できませんでした。私の現在の試み:

from pyspark.sql.types import *

schema = StructType([
  StructField("User", IntegerType()),
  ArrayType(StructType([
    StructField("user", StringType()),
    StructField("product", StringType()),
    StructField("rating", DoubleType())]))
  ])

エラーで戻ってきます:

elementType should be DataType
Traceback (most recent call last):
 File "/usr/hdp/current/spark2-client/python/pyspark/sql/types.py", line 290, in __init__
assert isinstance(elementType, DataType), "elementType should be DataType"
AssertionError: elementType should be DataType   

私はググってみましたが、これまでのところ、オブジェクトの配列の良い例はありません。

8
blissweb

StructFieldプロパティには、追加のArrayTypeが必要になります。これはうまくいくはずです:

from pyspark.sql.types import *

schema = StructType([
  StructField("User", IntegerType()),
  StructField("My_array", ArrayType(
      StructType([
          StructField("user", StringType()),
          StructField("product", StringType()),
          StructField("rating", DoubleType())
      ])
   )
])

詳細については、このリンクを確認してください: http://nadbordrozd.github.io/blog/2016/05/22/one-weird-trick-that-will-fix-your-pyspark-schemas/

12
kam