Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pyspark数据帧类运算符_Pyspark_Spark Dataframe - Fatal编程技术网

Pyspark数据帧类运算符

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

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_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()