我是一个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())
Run Code Online (Sandbox Code Playgroud)
这完全符合我的要求.
这是我到目前为止所尝试的.
val l = sc.textFile("my_file_path")
val l_filtered = l.filter(x => x.forall(_.isDigit))
Run Code Online (Sandbox Code Playgroud)
这会抛出一个错误,说char没有forall()函数.
我还尝试使用s.take(1)获取行的第一个字符,并按以下方式对其应用isDigit()函数.
val l = sc.textFile("my_file_path")
val l_filtered = l.filter(x => x.take(1).isDigit)
Run Code Online (Sandbox Code Playgroud)
这也是......
val l = sc.textFile("my_file_path")
val l_filtered = l.filter(x => x.take(1).Character.isDigit)
Run Code Online (Sandbox Code Playgroud)
这也会引发错误.
这基本上是一个小错误,因为我不习惯Scala语法,所以我很难搞清楚它.任何帮助,将不胜感激.
编辑:作为这个问题的答案,我尝试编写该函数,但我无法在我的应用程序中的filter()函数中使用它.将函数应用于文件中的所有行.