在Spark中,对于以下用例,我想了解使用INLINE和EXPLODE的主要区别是什么... 我不确定是否有任何性能影响,或者是否更喜欢一种方法,或者在哪些其他用例中适用其中一种而不适用另一种...
用例是从一个复杂数据类型(结构数组)中选择2个字段,我的直觉是使用INLINE,因为它会展开结构数组。
例如:
文档清楚地说明了它们的用途,但我希望更好地了解何时选择其中一个而不是另一个。
用例是从一个复杂数据类型(结构数组)中选择2个字段,我的直觉是使用INLINE,因为它会展开结构数组。
例如:
WITH sample AS (
SELECT 1 AS id,
array(NAMED_STRUCT('name', 'frank',
'age', 40,
'state', 'Texas'
),
NAMED_STRUCT('name', 'maria',
'age', 51,
'state', 'Georgia'
)
)
AS array_of_structs
),
inline_data AS (
SELECT id,
INLINE(array_of_structs)
FROM sample
)
SELECT id,
name AS person_name,
age AS person_age
FROM inline_data
使用 LATERAL VIEW EXPLODE:
WITH sample AS (
SELECT 1 AS id,
array(NAMED_STRUCT('name', 'frank',
'age', 40,
'state', 'Texas'
),
NAMED_STRUCT('name', 'maria',
'age', 51,
'state', 'Georgia'
)
)
AS array_of_structs
)
SELECT id,
person.name,
person.age
FROM sample
LATERAL VIEW EXPLODE(array_of_structs) exploded_people as person
文档清楚地说明了它们的用途,但我希望更好地了解何时选择其中一个而不是另一个。
SELECT id, INLINE(array_of_structs)
- UDTF 不支持在 SELECT 子句之外使用,也不支持嵌套在表达式中,在 Spark 2.4.5 中,它可以同时使用 INLINE 和 EXPLODE,而且不需要 Lateral View。已编辑答案。 - leftjoin