Как рассчитать среднее значение за неделю в pyspark из таблицы? - PullRequest
0 голосов
/ 03 сентября 2018

Мой стол как показано ниже:

+--------+-----+----+----------+
|  grDate|Items|rate|  unitName|
+--------+-----+----+----------+
|20131222|  SOY|34.7|Samastipur|
|20131223|  SOY|34.7|Samastipur|
|20131224|  SOY|34.7|Samastipur|
|20131225|  SOY|34.0|Samastipur|
|20131225|  SOY|34.7|Samastipur|
|20131227|  SOY|34.7|Samastipur|
|20131228|  SOY|34.7|Samastipur|
|20131229|  SOY|34.7|Samastipur|
|20131230|  SOY|34.6|Samastipur|
|20131230|  SOY|34.7|Samastipur|
|20131231|  SOY|34.7|Samastipur|
|20140101|  SOY|34.6|Samastipur|
|20140102|  SOY|34.6|Samastipur|
|20140103|  SOY|34.6|Samastipur|
|20140106|  SOY|34.6|Samastipur|
|20140107|  SOY|34.6|Samastipur|
|20140110|  SOY|33.9|Samastipur|
|20140111|  SOY|33.9|Samastipur|
|20140112|  SOY|33.9|Samastipur|
|20140113|  SOY|33.9|Samastipur|
+--------+-----+----+----------+
only showing top 20 rows

То, что я хочу, - это рассчитать среднее значение столбца ставки за неделю и создать новую таблицу с этими значениями.

Я пытаюсь выполнить этот запрос

spjsoya.createOrReplaceTempView("spjsoya")
spark.sql("SELECT grDate , (sum(total)/(WEEK(MAX(rate)) - WEEK(MIN(rate))+1)) AS rate FROM spjsoya  WHERE YEAR(grDate)='2013' GROUP BY grDate").show()

но это дает мне ошибку

pyspark.sql.utils.AnalysisException: u"Undefined function: 'WEEK'. This function is neither a registered temporary function nor a permanent function registered in the database 'default'.; line 1 pos 29"

Как мне написать правильный запрос, чтобы получить среднюю неделю?

1 Ответ

0 голосов
/ 03 сентября 2018

Ниже приведен код вашей проблемы:

import pyspark.sql.functions as F

spjsoya.withColumn(
    'date_str',
    F.from_unixtime(
        F.unix_timestamp('a', 'yyyyMMdd')
    )
).withColumn(
    "week_num",
    F.weekofyear(F.col("date_str"))
).withColumn(
    "month",
    F.month(F.col("date_str"))
).withColumn(
    "year",
    F.year(F.col("date_str"))
).groupby(
    "year",
    "week_num"
).agg(
    F.avg("rate").alias("average_rate")
).orderBy(
    "week_num"
).show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...