Как выполнить вставку SQL в таблицу Spark SQL со сложной структурой данных? - PullRequest
0 голосов
/ 23 апреля 2019

Я создал сложную структуру в таблице SQL в Databricks с использованием Python и Spark SQL следующим образом:

%python
# Create Table
myDataset = "Person"
myTableSchema = StructType() \
          .add("PersonId", IntegerType()) \
          .add("Name", StructType() \
            .add("FirstName", StringType(),nullable = True) \
            .add("LastName", StringType(),nullable = True) \
            ) \
          .add("CreatedDate", StringType(),nullable = True)

myTablePath = MY_HOME_DIR + "Test/" + myDataset + "/"

df = spark.createDataFrame(sc.emptyRDD(), myTableSchema)
df.write.format("delta").save(myTablePath)
spark.sql("CREATE TABLE IF NOT EXISTS {0} USING DELTA LOCATION '{1}'".format(myDataset, myTablePath))

Я могу выполнить SQL Select следующим образом:

sql_cmd = """SELECT named_struct("FirstName", Name) AS FirstName FROM Person"""
spark.sql(sql_cmd).show()

Вывод:

(1) Spark Jobs
+---------+
|FirstName|
+---------+
+---------+

Как выполнить инструкцию SQL INSERT с использованием Spark SQL в сложной структуре Name.FirstName, Name.LastName?

Я пробовал следующее:

sql_cmd = """INSERT INTO Person VALUES(1, 'John','Smith','4/23/2019')"""
spark.sql(sql_cmd)

Но я получаю сообщение об ошибке, говорящее о том, что есть 3 столбца, и я пытаюсь вставить 4. Я предполагаю, что структуру Name необходимо вставить как что-то вроде JSON или другого сложного формата структуры, но сейчасточно знаю, как это сделать.

Как это можно сделать с помощью операторов INSERT и SELECT, таких как:

%sql
INSERT INTO Person
SELECT
PersonId,FirstName,LastName,'4/23/2019' AS CreatedDate
FROM
OtherPersonTable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...