LEFT和In函数 - PySpark SQL

时间:2018-05-29 19:11:24

标签: pyspark pyspark-sql

我正在尝试在PySpark中转换下面的SQL查询,但不知何故它无法正常工作。

SELECT 
          Distinct *
                  FROM Dataset 
                  where left(PAT,3) in ('123','203') 
    

我已经在下面的pySpark中转换了查询

   df_data=PAT_Data

   df_data.where(df_data.PAT.substr(1,3)='123').show
   
   OR
   
   df_data.filter(col("PAT").like("123%")).show()

有什么想法吗?

感谢。

2 个答案:

答案 0 :(得分:1)

您可以在获取isin列的子字符串后使用PAT运算符:

df_data = spark.createDataFrame([['123221'], ['2321'], ['123221'], ['20322']], ['PAT'])
df_data.show()
+------+
|   PAT|
+------+
|123221|
|  2321|
|123221|
| 20322|
+------+

df_data.where(df_data.PAT.substr(1,3).isin(['123', '203'])).show()
+------+
|   PAT|
+------+
|123221|
|123221|
| 20322|
+------+

删除重复项:

df_data.where(df_data.PAT.substr(1,3).isin(['123', '203'])).dropDuplicates().show()
+------+
|   PAT|
+------+
| 20322|
|123221|
+------+

答案 1 :(得分:1)

检查以下内容是否适合您:

df_data.where('PAT like "123%"').show()

df_data.where('PAT rlike "^(123|203)"').distinct().show()

df_data.where('substr(PAT,1,3) in (123,203)').distinct().show()

顺便说一句。在spark.sparkContext.version ='2.2.1'

上测试