首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以优化方式使用Scala将NA值替换为"0“

以优化方式使用Scala将NA值替换为"0“
EN

Stack Overflow用户
提问于 2018-07-02 08:57:27
回答 1查看 1.2K关注 0票数 1

我的输入spark-dataframe名为df

代码语言:javascript
复制
+---------------+----+----+----+
|Main_CustomerID|  P1|  P2|  P3|
+---------------+----+----+----+
|            101|   1|null|   2|
|            102|null|null|   3|
|            103|   1|   1|null|
+---------------+----+----+----+

我需要将dfdf值替换为0。我已经做到了,

代码语言:javascript
复制
val columnsListSeq = df.columns.toSeq
var newDF = df
for (index <- columnsListSeq) {
newDF = newDF.na.fill(0, Seq(index))
}

我得到的dataframe是,

代码语言:javascript
复制
+---------------+---+---+---+
|Main_CustomerID| P1| P2| P3|
+---------------+---+---+---+
|            101|  1|  0|  2|
|            102|  0|  0|  3|
|            103|  1|  1|  0|
+---------------+---+---+---+

但是我需要使用比这个for loop更好的解决方案。我该怎么做?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-02 10:12:49

DataFrameNaFunctions来了

代码语言:javascript
复制
def fill(value: T, cols: Array[String]): DataFrame

代码语言:javascript
复制
def fill(value: T): DataFrame

可以分别填充列(由cols表示)和所有列的子集。

然而,这里没有任何性能改进--只是一个更简洁的代码。

关于your comment

当我尝试这样做时,df.na.fill(0)并没有将它分配给一个新的数据帧。所以df没有变化。通过分配给一个新的数据框架,我可以看到变化。

DataFrames是不变的。您的代码不会修改现有的对象,它只是覆盖var。如前所述,这里没有任何性能改进。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51132398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档