ВЛЕВО и В ФУНКЦИИ - PySpark SQL - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь преобразовать приведенный ниже SQL-запрос в PySpark, но почему-то он не работает.

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 голосов
/ 29 мая 2018

проверьте, работает ли для вас следующее:

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'

0 голосов
/ 29 мая 2018

Вы можете использовать оператор 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|
+------+
...