Кирпичи данных - взорвать JSON из SQL колонки с PySpark - PullRequest
1 голос
/ 31 марта 2020

Новое в Databricks. Иметь таблицу базы данных SQL, из которой я создаю фрейм данных. Один из столбцов представляет собой строку JSON. Мне нужно разбить вложенные JSON на несколько столбцов. Использовали этот пост и этот пост , чтобы добраться до того места, где я сейчас нахожусь.

Пример JSON:

{ "Module": { "PCBA Serial Number": "G7456789", "Manufacturing Designator": "DISNEY", "Firmware Version": "0.0.0", "Hardware Revision": "46858", "Manufacturing Date": "10/17/2018 4:04:25 PM", "Test Result": "Fail", "Test Start Time": "10/22/2018 6:14:14 AM", "Test End Time": "10/22/2018 6:16:11 AM" }

Код пока:

    #define schema 
         schema = StructType(
          [
            StructField('Module',ArrayType(StructType(Seq
              StructField('PCBA Serial Number',StringType,True),
              StructField('Manufacturing Designator',StringType,True),
              StructField('Firmware Version',StringType,True),
              StructField('Hardware Revision',StringType,True),
              StructField('Test Result',StringType,True),
              StructField('Test Start Time',StringType,True),
              StructField('Test End Time',StringType,True))), True) ,True),
            StructField('Test Results',StringType(),True),
            StructField('HVM Code Errors',StringType(),True)
          ]

#use from_json to explode json by applying it to column
        df.withColumn("ActivityName", from_json("ActivityName", schema))\
            .select(col('ActivityName'))\
            .show()

Ошибка:

    SyntaxError: invalid syntax
  File "<command-1632344621139040>", line 10
    StructField('PCBA Serial Number',StringType,True),
              ^
SyntaxError: invalid syntax

1 Ответ

1 голос
/ 31 марта 2020

Поскольку вы используете pyspark , тогда типы должны быть StringType() вместо StringType и удалить Seq заменить это с []

schema = StructType([StructField('Module',ArrayType(StructType([
    StructField('PCBA Serial Number',StringType(),True),
    StructField('Manufacturing Designator',StringType(),True),
    StructField('Firmware Version',StringType(),True),
    StructField('Hardware Revision',StringType(),True),
    StructField('Test Result',StringType(),True),
    StructField('Test Start Time',StringType(),True),
    StructField('Test End Time',StringType(),True)])), True),
StructField('Test Results',StringType(),True),
StructField('HVM Code Errors',StringType(),True)])
...