Извлечение структурных полей в Spark scala - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть df схемы

|-- Data: struct (nullable = true)
|    |-- address_billing: struct (nullable = true)
|    |    |-- address1: string (nullable = true)
|    |    |-- address2: string (nullable = true)
|    |-- address_shipping: struct (nullable = true)
|    |    |-- address1: string (nullable = true)
|    |    |-- address2: string (nullable = true)
|    |    |-- city: string (nullable = true)
|    |-- cancelled_initiator: string (nullable = true)
|    |-- cancelled_reason: string (nullable = true)
|    |-- statuses: array (nullable = true)
|    |    |-- element: string (containsNull = true)
|    |-- store_code: string (nullable = true)
|    |-- store_name: string (nullable = true)
|    |-- tax_code: string (nullable = true)
|    |-- total: string (nullable = true)
|    |-- updated_at: string (nullable = true)

Мне нужно извлечь все поля в отдельных столбцах без указания имени вручную.

Есть ли способ, которым мы можем это сделать? Я попытался:

val df2=df1.select(df1.col("Data.*"))

, но получил ошибку

org.apache.spark.sql.AnalysisException: No such struct field * in address_billing, address_shipping,....

Также, может ли кто-нибудь подсказать мне, как добавить префикс ко всем этим столбцам, так как некоторые из имен столбцов могут быть таким же. Вывод должен быть похож на address_billing_address1 address_billing_address2. , .

1 Ответ

0 голосов
/ 12 февраля 2020

Просто измените df1.col на col. Любой из них должен работать:

df1.select(col("Data.*"))
df1.select($"Data.*")
df1.select("Data.*")
...