создание нескольких фреймов данных тщательной итерации - PullRequest
0 голосов
/ 14 июня 2019

Я заранее прошу прощения, если мой вопрос находится где-то на этом сайте. Я искал на основе слов, которые я знаю, но ни один из них не имел ответа на то, что я искал.

У меня есть огромный фрейм данных 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

Возможно ли что-то подобное?

...