1

我試圖從表中獲取列的唯一值,並將其與其他列(如sum,tablename)一起打印,如下面的查詢中所示。 下面顯示的子查詢獲取多行是有效的,但爲了將它放在列中,我需要將它列爲列表或文本,例如[1,2,1]。如何將這些數據展平以適應如下所示的相同查詢。我的首選方法是使用Spark SQL。請幫忙。在火花sql查詢中展平數據 - Spark Dataframe

**Subquery** 

    (select distinct $field from tablename) 

    **Actual Code** 

    RDDdf.createOrReplaceTempView(「tablename」) 

    val x= RDDdf.schema.fieldNames 

    val dfs = x.map(field => spark.sql(s"select 'RDDdf' as TableName, 
    '$field'as column, sum($field) as Sum, (select distinct $field from 
    tablename) from tablename")) 

    **Expected output** 

    TableName | column | Sum | UniqueVal 
    ----------+---------+-----+---------- 
    RDDdf  | a  | 4 | 1,2,1 

回答

1

使用內置函數collect_list:

select collect_list(value) from (select distinct($field) as value from tablename) as values 

要知道,這將是非常緩慢的大型數據集再次

+0

謝謝T.Gaweda!數據集將會有數百萬行的巨大數據......用其他方式來編寫同樣的東西? – sabby

+0

@sabby問題是,所有的數據將被收集到一個節點。沒有其他選擇來做這樣的查詢。 collect_list是一個很好的函數,只是你的用例會讓它變慢,因爲除了在一個節點上收集所有值之外沒有其他選項顯示所有值 –

+0

問題是當你有很多不同的字段值時 - 如果你有幾百萬行,但是隻有幾個獨特的值,那麼在一個節點上收集數據將沒有問題:) –