簡體   English   中英

如何添加新列以觸發數據框取決於multipme現有列?

[英]how to add new column to spark dataframe depend on multipme existing column?

我將向數據框添加新列。 例如,我有一個數據框df

    id|c_1         |c_2          |c_3       |c_4    |.......|c_200    |c_tot
    1 |[1,2,3,5]   |[t,4,bv,55,2]|[]        |[1,22] |       |[k,v,c,x]|[1,2,3,4,5,t,bv,55,22,k,v,c,x]
    2 |[1,2,4]     |[4,3,8]      |[6,7]     |[10,12]        | [11]    |[1,2,3,4,6,7,8,10,11,12]
    .
    .

我想從我的數據框中獲取一些統計信息,例如,我想要一個包含每個id的熵的新列,因此我們必須為每個c_i計算pi,然后計算熵

    pi=(size(c_i)+1))/(size(c_tot)+1)
    Entropy=-sum(pi*ln(pi))   \\i in[1,200]

例如,對於新列的第一個值,熵必須為

    entropy=-((5/14*ln(5/14))+(6/14*ln(6/14))+(1/14*ln(1/14)).... +(5/14)*ln(5/14))

我知道我可以使用表達式鏈接,但是由於我有多個列,所以找不到表達式的想法。

您的表達可以稍微簡化為:

熵

在Scala中生成該代碼:

entropy = (1 to 200).toSeq
                    .map(c => s" ( size(c_$c) + 1 ) * ln( (size(c_$c) + 1) / (size(c_tot) + 1) ) ")
                    .mkString("-(" , "+" , ") / size(c_tot) ")

然后與expr

df.withColumn("entropy" , expr(entropy) )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM