Я заранее прошу прощения, если мой вопрос находится где-то на этом сайте. Я искал на основе слов, которые я знаю, но ни один из них не имел ответа на то, что я искал.
У меня есть огромный фрейм данных df
со столбцом даты, который представляет собой строковый тип данных, например:
+------------+
|REP_WORK_DAY|
+------------+
| 2019-05-27|
| 2019-05-28|
| 2019-05-28|
| 2019-05-28|
| 2019-05-29|
+------------+
Фрейм данных имеет множество других столбцов, которые я не показываю для простоты. Я хотел бы создать, скажем, 10 фреймов данных, фильтруя df
каждый день.
Я делаю это вручную так:
df20=df.filter(df.REP_WORK_DAY == "2019-05-20")
df21=df.filter(df.REP_WORK_DAY == "2019-05-21")
df22=df.filter(df.REP_WORK_DAY == "2019-05-22")
df23=df.filter(df.REP_WORK_DAY == "2019-05-23")
etc...
и
df20.createOrReplaceTempView("df20")
df21.createOrReplaceTempView("df21")
df22.createOrReplaceTempView("df22")
df23.createOrReplaceTempView("df23")
etc...
Есть ли способ использовать цикл for, чтобы он был примерно таким (псевдокод):
for x in range(20,31):
y=20
df[x]=df.filter(df.REP_WORK_DAY == "2019-05-[y]")
y=y+1
и
for x in range(20,31)
df[x].createOrReplaceTempView("df[x]")
Точно так же есть способ перебирать переменные в коде SQL. Например, у меня есть следующий код SQL, который мне нужно запустить после создания упомянутых выше фреймов данных:
spark.sql("""SELECT LOT_ID, COUNT(DISTINCT PHOTO_LAYER) as PL_COUNT
FROM df20
WHERE VAR A like '%BOO%'
GROUP BY LOT_ID
""").createOrReplaceTempView("plcount20")
df20
будет по существу df[x]
, а plcount20
будет plcount[x]
внутри сценария SQL
Возможно ли что-то подобное?