1.Array Schema轉換到Sting Schema ——array_join()方法
使用案例:
原始數據如下圖所示:
df.show()

df1 = df.select(array_join(df3.user_array, ",").alias("joined"), 'umid', 'user_array')
df1.show()

2.Sting Schema 轉換成 Array Schema
其中,主要有以下三種方式:
2.1 split()方法
2.2 Array()方法
2.3 自定義udf函數(靈活,但是效率低)
案例:
原始數據如上圖所示,
df2 = df1.withColumn('array1', array('joined')).withColumn('array2', split(col('joined'), ','))
df2.show()

3.針對Array[Array]Schema,變換成Array[String]的方法——flatten()方法
pyspark中flatten()方法,實現的功能類似於下面的案例:
[1,3,[4,5], [7,9.9]] --->(flatten)----->[1,3,4,5,7,9,9]
4.字符串聚合操作——collect_set \ collect_list
這兩個都是針對String類型的聚合操作,類似於數值類型的sum、avg等,使用案例為
df = spark.createDataFrame([
("a", "code1", "name1"),
("a", "code1", "name1"),
("a", "code2", "name2"),
], ["id", "code", "name"])

df.groupBy('id').agg(collect_set('code').alias('collect_set_test'), collect_list('name').alias('collect_list_test')

備注:
1)collect_set和collect_list的區別是:collect_set實現去重的功能。
2)針對Array Schema的DataFrame直接落地es中,需要額外注意(將在下節中,spark數據庫連接中進行特殊說明)
