Я думаю, что вы не можете обойти объединение, потому что стержню понадобятся значения временных меток, и первая группа не должна их учитывать. Поэтому, если вам нужно создать значения NE
и cnt
, вы должны сгруппировать фрейм данных только по id
, что приведет к потере временной метки, если вы хотите сохранить значения в столбцах, вы должны сделать сводку, как вы сделал отдельно и присоединиться к нему.
Единственное улучшение, которое можно сделать, - это перенести фильтр на создание df1. Как вы сказали, это уже может улучшить производительность, поскольку df1 должен быть намного меньше после фильтрации ваших реальных данных.
from pyspark.sql.functions import *
df=sc.parallelize([(1,1,1),(5,0,2),(27,1,1),(1,0,3),(5,1,1),(1,0,2)]).toDF(['id', 'error', 'timestamp'])
df1=df.groupBy('id').agg(sum('error').alias('Ne'),count('*').alias('cnt')).filter(col('cnt')>1)
df2=df.groupBy('id').pivot('timestamp').agg(count('*')).fillna(0)
df1.join(df2, on='id').show()
Выход:
+---+---+---+---+---+---+
| id| Ne|cnt| 1| 2| 3|
+---+---+---+---+---+---+
| 5| 1| 2| 1| 1| 0|
| 1| 1| 3| 1| 1| 1|
+---+---+---+---+---+---+
Вы можете использовать .net через COM Interop и использовать ORM в .net. Другой вариант - использовать Code Smith или MyGeneration и генерировать классы VB6.
Вот некоторые VB6 ORM, которые я не использовал и не исследовал: http://www.sparxsystems.com.au/products/ea/features.html
Если я найду больше, я обновлю
Ничто не мешает вам использовать C # или VB.Net и COM Interop для создания DLL, которая может быть прочитана вашей классической страницей ASP. Мы делали это несколько раз.
В MSDN есть два хороших учебника по COM Interop .
Я думаю, IMVHO, что ORM - хороший выбор для небольших проектов, но я предпочитаю простые и прямые соединения ODBC для более крупных.
Могут быть предоставлены все (хорошие) функции ORM. хорошими СУБД, такими как Oracle или SQL Server.