如何在Hive中将一个大型数组分解为多个列

dnph8jn4  于 2023-10-18  发布在  Hive
关注(0)|答案(1)|浏览(270)

我有下表:

  1. ID Data
  2. 101 [0,0,1,1,1]
  3. 102 [0,0,0,1,0]
  4. 103 [1,0,1,0,1]

如何在不使用Array index的情况下将数组分解为多个列(因为实际的Array有大约16 k个元素)以生成下表:

  1. ID Data_1 Data_2 Data_3 Data_4 Data_5
  2. 101 0 0 1 1 1
  3. 102 0 0 0 1 0
  4. 101 1 0 1 0 1

我不能就这么做:

  1. SELECT ID, Data[0], Data[1], Data[2], Data[3], Data[4] FROM tmp_table;

因为我在数组中有大约16,000个元素,这将是一个相当大的查询。
编辑:我需要使用Hiveql来做这件事,所以不能使用PySpark。

wgeznvg7

wgeznvg71#

在pyspark中,您可以聚合数组框架来计算列Data中的max数组的大小,然后根据数组中的位置动态提取数组项

  1. size = df.agg(F.max(F.size('Data'))).first()[0]
  2. df1 = df.select('ID', *[F.col('Data')[i].alias(f'Data_{i + 1}') for i in range(size)])
  1. +---+------+------+------+------+------+
  2. | ID|Data_1|Data_2|Data_3|Data_4|Data_5|
  3. +---+------+------+------+------+------+
  4. |101| 0| 0| 1| 1| 1|
  5. |102| 0| 0| 0| 1| 0|
  6. +---+------+------+------+------+------+

相关问题