我正在尝试在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()
有什么想法吗?
感谢。
答案 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'
上测试