У меня есть PySpark с данными о биржевых торгах в течение одного 24-часового периода. Столбцы включают в себя: ДАТА, ИМЯ ВРЕМЕНИ, VOL, СТОИМОСТЬ. (Опять же, дата несколько избыточна, так как все транзакции произошли в один и тот же день.
Мне нужны следующие столбцы: NAME, DATE, HOUR, VOL, где каждая строка представляет биржевой тикер, такой как AAPL, иVOL представляет количество сделок этой акции в течение этого ЧАСА.
В Excel, я думаю, это было бы легче всего решить, используя сводную таблицу. Что такое эквивалент PySpark?
ВотПример из моего кадра данных, чтобы проиллюстрировать мои данные:
+--------+--------+--------+----+------+
| DATE| TIME | NAME |VOL | COST |
+--------+--------+--------+----+------+
|20120103|09:04:08| AAPL| 500|409.21|
|20120103|09:06:49| AAPL| 100|409.41|
|20120103|09:21:10| AAPL| 100|409.49|
|20120103|09:26:28| AAPL| 100|409.04|
|20120103|09:29:55| AAPL| 100| 410.3|
|20120103|09:30:00| AAPL| 200|409.91|
|20120103|09:30:04| AAPL| 100|410.11|
+--------+--------+--------+----+------+
Следующие шаги привели меня в порядок, но не с желаемыми столбцами.
from pyspark.sql.types import IntegerType
from pyspark.sql.functions import udf
def fix_time(time):
return time[:2]
udf_myFunction = udf(fix_time)
df1 = df.withColumn("TIME_H", udf_myFunction("TIME"))
import pyspark.sql.functions as psf
df1.groupBy("NAME").pivot("TIME_H").agg(psf.max("VOL")).show()
>>>>
+--------+---+---+---+---+---+---+---+
| NAME | 09| 10| 11| 12| 13| 14| 15|
+--------+---+---+---+---+---+---+---+
| AAPL|800|437|800|400|808|800|700|
| GOOG|300|400|527|200|450|300|700|
| IBM|910|992|800|500|300|500|900|
| MSFT|900|900|900|900|794|800|800|
+--------+---+---+---+---+---+---+---+
Опять же, мне бы очень хотелосьэта же информация, однако, с колонками: NAME, DATE, HOUR, VOL.
Достаточно ли просто взять то, что у меня есть, и преобразовать его в то, что я хочу, или есть более эффективный способполучить желаемый результат?