使用火花本机函数的 PySpark 过滤器 RDD

时间:2021-05-21 08:35:54

标签: apache-spark pyspark apache-spark-sql

使用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) == ' '")

1 个答案:

答案 0 :(得分:1)

您可以使用 spark SQL 函数,例如:

df = spark.sql("""
SELECT line FROM text.`./`
WHERE line NOT LIKE ' %'
""")

我从未加载过这样的文本文件(主要是镶木地板、JSON 或 CSV),但我相信它也应该可以工作。看看this spark SQL docs entry