如何根据多个现有列向 spark 数据框添加新列?
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) )
我要向数据框添加新列。例如,我有一个数据框 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) )