这是我的表结构:
customer_item(struct)
customer_name(string)
customer_detail(struct)
bill_to_city(string)
bill_to_country(string)
bill_to_state(string)
contact_phone(string)
country_name(string)
partner_name(string)
这是我得到的 Dataframe ,我想用这个df创建一个将来可以使用的视图,但是我这里得到的结构是扁平的,我需要把它转换成上面的结构,否则我将来创建的视图就不能用了。
+-------------+------------+---------------+-------------+-------------+-------------+------------+
|customer_name|bill_to_city|bill_to_country|bill_to_state|contact_phone|country_name |partner_name|
+-------------+------------+---------------+-------------+-------------+-------------+------------+
|abc |Arlington |US |Texas |123.456.7890 |United States|name |
+-------------+------------+---------------+-------------+-------------+-------------+------------+
这是我的代码,出现错误
对未解析对象的限定符调用无效,树:'客户_项目'
如何解决此问题?
val selectedDf = df.select(col("customer_detail")).select("customer_detail.*")
selectedDf.show(false)
val tempViewName = "tempStageTransView"
selectedDf.createOrReplaceTempView(tempViewName)
executeInsertIntoBookingTransactionQuery(spark).show()
private def executeInsertIntoTable(sparkSession: SparkSession) = {
sparkSession.sql(raw"""
INSERT OVERWRITE TABLE ${myTable}
SELECT
null,
(customer detail here)
null,
null,
null,
null
FROM tempStageTransView
""")
}
1条答案
按热度按时间cedebl8k1#
可以使用
org.apache.spark.sql.functions
中的struct
函数创建结构。例如,如下所示(注意,我使用了两次
struct
,因为您的模式中有两个嵌套的结构体):使用
.as
方法可以重命名列,这样就可以使用customer_detail
和customer_item
列名。