Apache spark 使用spark本机函数的PySpark过滤器RDD

Apache spark 使用spark本机函数的PySpark过滤器RDD,apache-spark,pyspark,apache-spark-sql,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\tblubb

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

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

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

我从未加载过这样的文本文件(主要是拼花、JSON或CSV),但我相信它也应该可以工作。看看。

本机Spark SQL函数在数据帧上工作。你能用数据帧代替RDD吗?我能。往返rdd->df->rdd对性能的影响如何(我需要一个rdd来反馈给CSV解析器,出于性能和边缘情况的原因,我不喜欢用正则表达式等实现它)不确定它是否能提供更好的性能,但您可以尝试
spark.createDataFrame(sc.textFile(*.txt”).map(Row)).filter(“substring(_1,1,1)!=”).rdd.map(lambda x:x[0])
您可以发布原始输入文件吗?通过查看您的输出,我相信我们也可以使用带有“\t”的“spark.read.csv”在数据帧中读取此文件“delimeter,一旦进入数据帧,我们应该能够使用本机spark进行过滤。问题是关于rddsYes,但也关于为性能优化的本机函数。我相信SQL函数是最好的选择。很明显,最好是看看不同方法的基准测试。DDS是旧帽子