左侧和功能 - PySpark SQL

LEFT and In Function - 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()

有什么想法吗?

谢谢。

PAT列的子串后可以使用isin运算符:

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|
+------+

检查以下是否适合您:

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'

上测试