如何使用Spark中的IF语句删除RDD的列(使用Scala)

发布于 2025-01-20 05:08:27 字数 160 浏览 5 评论 0原文

假设我有一个文本文件,每个条目都有几百个数据点。我想摆脱具有问号的任何列 - 使用掉落功能,然后挑选出来似乎很乏味。有更快的方法吗?

dataframe.map(x => ifcontainsquestionmarkdropcolumn(x))之类的东西?

Suppose I have a text file where each entry has a couple hundred data points. I want to get rid of any column which has a question mark- using the drop function and picking it out seems tedious; is there a faster way?

Something like dataframe.map( x => ifcontainsquestionmarkdropcolumn(x)) ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

烈酒灼喉 2025-01-27 05:08:28

可以使用“sum”函数计算每列中问号的数量,并且可以删除数量非零的列:

val df = Seq(("nomark", "question?mark"))
  .toDF("expected", "dropped")

val questionCountColumns = df
  .columns
  .map(c => sum(when(col(c).contains("?"), 1).otherwise(0)).alias(c))

val questionCountRow = df.select(questionCountColumns: _*).first()

val columnsToDrop = df
  .columns
  .filter(c => questionCountRow.getAs[Long](c) > 0)

val result = df.drop(columnsToDrop: _*)

结果为:

+--------+
|expected|
+--------+
|nomark  |
+--------+

Number of question marks in each column can be calculated with "sum" function, and columns where number is non-zero can be dropped:

val df = Seq(("nomark", "question?mark"))
  .toDF("expected", "dropped")

val questionCountColumns = df
  .columns
  .map(c => sum(when(col(c).contains("?"), 1).otherwise(0)).alias(c))

val questionCountRow = df.select(questionCountColumns: _*).first()

val columnsToDrop = df
  .columns
  .filter(c => questionCountRow.getAs[Long](c) > 0)

val result = df.drop(columnsToDrop: _*)

Result is:

+--------+
|expected|
+--------+
|nomark  |
+--------+
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文