2017-05-02 62 views
4

我得到了這樣的火花SQL中的數據幀中提取值:我怎樣才能從陣列中的火花數據幀的一列

scala> result.show 
+-----------+--------------+ 
|probability|predictedLabel| 
+-----------+--------------+ 
| [0.0,1.0]|   0.0| 
| [0.0,1.0]|   0.0| 
| [0.0,1.0]|   0.0| 
| [0.0,1.0]|   0.0| 
| [0.0,1.0]|   0.0| 
| [0.1,0.9]|   0.0| 
| [0.0,1.0]|   0.0| 
| [0.0,1.0]|   0.0| 
| [0.0,1.0]|   0.0| 
| [0.0,1.0]|   0.0| 
| [0.0,1.0]|   0.0| 
| [0.0,1.0]|   0.0| 
| [0.1,0.9]|   0.0| 
| [0.6,0.4]|   1.0| 
| [0.6,0.4]|   1.0| 
| [1.0,0.0]|   1.0| 
| [0.9,0.1]|   1.0| 
| [0.9,0.1]|   1.0| 
| [1.0,0.0]|   1.0| 
| [1.0,0.0]|   1.0| 
+-----------+--------------+ 
only showing top 20 rows 

我想創建一個新的命名概率列一個新的數據幀這是第一個值從原始數據幀的概率列如下:

+-----------+--------------+----------+ 
|probability|predictedLabel| prob | 
+-----------+--------------+----------+ 
| [0.0,1.0]|   0.0|  0.0| 
| [0.0,1.0]|   0.0|  0.0| 
| [0.0,1.0]|   0.0|  0.0| 
| [0.0,1.0]|   0.0|  0.0| 
| [0.0,1.0]|   0.0|  0.0| 
| [0.1,0.9]|   0.0|  0.0| 
| [0.0,1.0]|   0.0|  0.0| 
| [0.0,1.0]|   0.0|  0.0| 
| [0.0,1.0]|   0.0|  0.0| 
| [0.0,1.0]|   0.0|  0.0| 
| [0.0,1.0]|   0.0|  0.0| 
| [0.0,1.0]|   0.0|  0.0| 
| [0.1,0.9]|   0.0|  0.1| 
| [0.6,0.4]|   1.0|  0.6| 
| [0.6,0.4]|   1.0|  0.6| 
| [1.0,0.0]|   1.0|  1.0| 
| [0.9,0.1]|   1.0|  0.9| 
| [0.9,0.1]|   1.0|  0.9| 
| [1.0,0.0]|   1.0|  1.0| 
| [1.0,0.0]|   1.0|  1.0| 
+-----------+--------------+----------+ 

我該怎麼做? 謝謝!

+1

@slfan我不明白這個問題是如何關閉以進行「過寬」。它以一個明確的例子陳述了一個具體問題 –

回答

2

如果使用UDF星火(S)這是相當簡單的。就像這樣:

val headValue = udf((arr: Seq[Double]) => arr.head) 

result.withColumn("prob", headValue(result("probability"))).show 

它會給你所需的輸出:

+-----------+--------------+----------+ 
|probability|predictedLabel| prob | 
+-----------+--------------+----------+ 
| [0.0,1.0]|   0.0|  0.0| 
| [0.0,1.0]|   0.0|  0.0| 
| [0.0,1.0]|   0.0|  0.0| 
| [0.0,1.0]|   0.0|  0.0| 
| [0.0,1.0]|   0.0|  0.0| 
| [0.1,0.9]|   0.0|  0.0| 
| [0.0,1.0]|   0.0|  0.0| 
| [0.0,1.0]|   0.0|  0.0| 
| [0.0,1.0]|   0.0|  0.0| 
| [0.0,1.0]|   0.0|  0.0| 
| [0.0,1.0]|   0.0|  0.0| 
| [0.0,1.0]|   0.0|  0.0| 
| [0.1,0.9]|   0.0|  0.1| 
| [0.6,0.4]|   1.0|  0.6| 
| [0.6,0.4]|   1.0|  0.6| 
| [1.0,0.0]|   1.0|  1.0| 
| [0.9,0.1]|   1.0|  0.9| 
| [0.9,0.1]|   1.0|  0.9| 
| [1.0,0.0]|   1.0|  1.0| 
| [1.0,0.0]|   1.0|  1.0| 
+-----------+--------------+----------+ 
7

您可以使用Dataset能力和美妙的functionslibrary來完成你所需要的:

result.withColumn("prob", $"probability".getItem(0))

這增加了一個新的名爲Columnprob價值源自所述probabilityColumn通過採取的第一項(索引0 - 我們是計算機科學家畢竟)在數組中。

我也要提的是,UDF應該是你最後的手段,因爲催化劑優化目前無法優化UDF的,所以你應該總是喜歡內置功能來獲得最大的催化劑。