【发布时间】:2015-09-25 18:32:16
【问题描述】:
我是一名 Python 程序员,由于 Python API 对我的 Spark 应用程序来说太慢了,因此决定将我的代码移植到 Spark Scala API,以比较计算时间。
我正在尝试使用 Spark 中的 Scala API 从一个大文件中过滤出以数字字符开头的行。在我的文件中,有些行有数字,有些有单词,我想要只有数字的行。
所以,在我的 Python 应用程序中,我有这些行。
l = sc.textFile("my_file_path")
l_filtered = l.filter(lambda s: s[0].isdigit())
完全符合我的要求。
这是我迄今为止尝试过的。
val l = sc.textFile("my_file_path")
val l_filtered = l.filter(x => x.forall(_.isDigit))
这会抛出一个错误,指出 char 没有 forall() 函数。
我还尝试使用 s.take(1) 获取行的第一个字符,并通过以下方式对其应用 isDigit() 函数。
val l = sc.textFile("my_file_path")
val l_filtered = l.filter(x => x.take(1).isDigit)
还有这个……
val l = sc.textFile("my_file_path")
val l_filtered = l.filter(x => x.take(1).Character.isDigit)
这也会引发错误。
这基本上是一个小错误,由于我不习惯 Scala 语法,我很难弄清楚。任何帮助将不胜感激。
编辑:正如对此question 的回答,我尝试编写函数,但我无法在我的应用程序的 filter() 函数中使用它。 将函数应用于文件中的所有行。
【问题讨论】:
-
@JustinPihony 我尝试应用这些答案,您可以在问题描述中看到它们。我正在尝试在链接中接受的答案中应用该函数,但无法在 filter() 函数中使用它
标签: scala syntax apache-spark