使用pySpark,我需要过滤一个字符串列表的RDD:
In [74]: sc.textFile("*.txt").collect()
Out[74]:
['laber\tblubber',
'foo\tbar',
'dummy\tdumdum',
'col1\tcol2\tcol3\tcol4\tcol5',
' 1\t2\t3\t4\t5',
' 11\t22\t33\t44\t44',
' 9\t8\t7\t6\t5',
'laber\tblubber',
'foo\tbar',
'dummy\tdumdum',
'col1\tcol2\tcol3\tcol4\tcol5',
' 99\t2\t3\t4\t5',
' 99\t22\t33\t44\t44',
' 99\t8\t7\t6\t5']
我想过滤掉所有不以空格开头的行。我知道,这可以通过以下方式实现:
sc.textFile("*.txt").filter(lambda x: x[0] == " ")
但是我想要最大的性能,据我所知,使用 python lamdas 会增加开销,并且查询计划器不能很好地优化。
如何在 RDD 上使用 Spark 原生函数?
我期待这样的事情:
sc.textFile("*.txt").filter("substr(_, 0, 1) == ' '")
答案 0 :(得分:1)
您可以使用 spark SQL 函数,例如:
df = spark.sql("""
SELECT line FROM text.`./`
WHERE line NOT LIKE ' %'
""")
我从未加载过这样的文本文件(主要是镶木地板、JSON 或 CSV),但我相信它也应该可以工作。看看this spark SQL docs entry。