Pyspark数据帧类运算符
Pyspark中LIKE运算符的等效值是什么? 例如,我想做:Pyspark数据帧类运算符,pyspark,spark-dataframe,Pyspark,Spark Dataframe,Pyspark中LIKE运算符的等效值是什么? 例如,我想做: SELECT * FROM table WHERE column LIKE "*somestring*"; 寻找像这样简单的东西(但这不起作用): 嗯……应该有类似regexp的sql-> df.select('column').where(col('column').like("%s%")).show() 我总是使用UDF来实现这些功能: from pyspark.sql import functions as F like
SELECT * FROM table WHERE column LIKE "*somestring*";
寻找像这样简单的东西(但这不起作用):
嗯……应该有类似regexp的sql->
df.select('column').where(col('column').like("%s%")).show()
我总是使用UDF来实现这些功能:
from pyspark.sql import functions as F
like_f = F.udf(lambda col: True if 's' in col else False, BooleanType())
df.filter(like_f('column')).select('column')
在pyspark中,您始终可以将数据帧注册为表并查询它
df.registerTempTable('my_table')
query = """SELECT * FROM my_table WHERE column LIKE '*somestring*'"""
sqlContext.sql(query).show()
您可以使用
where
和col
函数执行相同的操作其中
将用于根据条件过滤数据(如果列类似于“%string%”
,则在此处)。col('col_name')
用于表示条件,like
是运算符:
df.where(col('col1').like("%string%")).show()
使用spark 2.0.0以后的版本,以下功能也可以正常工作:
df.select('column')。其中(“类似于“%s%”的列”)。show()
使用like运算符
要复制不区分大小写的
ILIKE
,可以将lower
与like
结合使用
从pyspark.sql.functions导入
df.where(lower(col('col1')).like(“%string%”).show()
使用否定,您只需执行以下操作:
df = df.filter("column not like '%bla%'")
这对我很有用:
import pyspark.sql.functions as f
df.where(f.col('column').like("%x%")).show()
这是Scala,但pySpark与这个答案基本相同:您可以使用where和col函数来执行相同的操作。where将用于根据条件筛选数据(此处是,如果列类似于“%s%”)。col('col_name')用于表示条件,like是运算符。虽然功能正常,但使用python UDF要比使用column函数
like(…)
慢。原因是使用pyspark UDF需要在JVM和Python之间转换数据。此外,dataframe引擎无法使用pyspark UDF优化计划,也无法使用其内置函数优化计划。是否有任何方法可以包括多个检查-我想检查'%s%'
和'%r%'
,但我只想像您一样使用LIKE
运算符。df.select('column')。其中('col(“foo”)。比如(“%s%”)和(col(“bar”)。比如(“%s%””))
你在找这样的东西吗?这正是我要找的。太好了!!别忘了投票了:D评论和/或答案昨天投票给了你的答案,现在也投票给了你的评论:)在Spark 2.0及更新版本中,使用createOrReplaceTempView
代替RegisterEmptable是不推荐的。
df = df.filter("column not like '%bla%'")
import pyspark.sql.functions as f
df.where(f.col('column').like("%x%")).show()