web-dev-qa-db-fra.com

Création d'un schéma Pyspark impliquant un ArrayType

J'essaie de créer un schéma pour mon nouveau DataFrame et j'ai essayé diverses combinaisons de crochets et de mots clés, mais je n'ai pas réussi à comprendre comment faire fonctionner cela. Ma tentative actuelle:

from pyspark.sql.types import *

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

Revient avec l'erreur:

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   

J'ai googlé, mais jusqu'à présent, aucun bon exemple d'un tableau d'objets.

8
blissweb

Vous aurez besoin d'une propriété StructField supplémentaire pour ArrayType. Celui-ci devrait fonctionner:

from pyspark.sql.types import *

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

Pour plus d'informations, consultez ce lien: http://nadbordrozd.github.io/blog/2016/05/22/one-weird-trick-that-will-fix-your-pyspark-schemas/

12
kam