найти конкретную c строку в искре sql - pyspark - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь найти точное совпадение строки в столбце данных из кадра данных сотрудника.

Employee  days_present
Alex      1,2,11,23,
John      21,23,25,28

Необходимо определить, какие сотрудники присутствуют на втором месте, исходя из ожидаемого результата в столбце days_present: Alex

ниже то, что я пробовал

    df = spark.sql("select * from employee where days_present RLIKE '2')
    df.show()

This returns both Alex & John

Также я хотел бы выяснить, кто присутствует на 2 и 11, в этом случае ожидаемый выход будет только ALex

1 Ответ

2 голосов
/ 26 марта 2020

Мы можем использовать функцию array_intersect, начиная с Spark-2.4 +, а затем проверить размер массива, если size >=2

Example:

df.show()
+--------+------------+
|Employee|days_present|
+--------+------------+
|    Alex|   1,2,11,23|
|    John| 21,23,25,28|
+--------+------------+
#DataFrame[Employee: string, days_present: string]

df.withColumn("tmp",split(col("days_present"),",")).\
withColumn("intersect",array_intersect(col("tmp"),array(lit("2"),lit("11")))).\
filter(size("intersect") >= 2).\
drop("tmp","intersect").\
show()

#+--------+------------+
#|Employee|days_present|
#+--------+------------+
#|    Alex|   1,2,11,23|
#+--------+------------+

In spark-sql:

df.createOrReplaceTempView("tmp")

spark.sql("""select Employee,days_present from (select *,size(array_intersect(split(days_present,","),array("2","11")))size from tmp)e where size >=2""").show()

#+--------+------------+
#|Employee|days_present|
#+--------+------------+
#|    Alex|   1,2,11,23|
#+--------+------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...