Jestem użytkownikiem R i często stwierdzam, że muszę pisać funkcje, które wymagają podzbioru dużych zestawów danych (10 miliony wierszy). Kiedy stosuję takie funkcje w wielu obserwacjach, może to być bardzo czasochłonne, jeśli nie jestem ostrożny, jak go zaimplementuję.Najszybszy sposób na podzbiór - data.table vs. MySQL
W tym celu korzystałem czasami z pakietu data.table, który zapewnia znacznie większe prędkości niż dzielenie przy użyciu ramek danych. Ostatnio zacząłem eksperymentować z pakietami takimi jak RMySQL, przesyłając kilka tabel do mysql i używając pakietu do uruchamiania kwerend SQL i zwracania wyników.
Znalazłem mieszane ulepszenia wydajności. W przypadku mniejszych zestawów danych (milionów) wydaje się, że ładowanie danych do pliku data.table i ustawianie odpowiednich klawiszy powoduje szybsze tworzenie podzbiorów. W przypadku większych zestawów danych (od 10 do 100 s), wydaje się, że wysyłanie zapytania do mysql porusza się szybciej.
Zastanawiało się, czy ktoś ma wgląd w to, która technika powinna szybciej zwracać proste zapytania podzbioru lub agregacji i czy powinno to zależeć od wielkości danych? Rozumiem, że ustawianie kluczy w data.table jest w pewnym sensie analogiczne do tworzenia indeksu, ale nie mam o wiele więcej intuicji poza tym.
Wiem, że niektórzy inni ludzie mają więcej doświadczenia z tym, więc pozwolę im wyjaśnić na podstawie rzeczywistych odpowiedzi, ale podejrzewam, że będziesz chciał spojrzeć na pakiet 'sqldf', który robi dokładnie to, co ty. opisując, tylko on tworzy tabelę w pamięci (chyba), więc zapytania mogą działać znacznie szybciej. – joran
dzięki, joran! Bardzo chciałbym to zrozumieć w kontekście dużych tabel. To wszystko spekulacje, ale dostałem radę, że problemy z szybkością, które mam, mogą wynikać z zarządzania pamięcią/ograniczeń. Wszakże przy korzystaniu z danych.tabela, czy te tabele też nie są w pamięci? – exl
Rzeczywiście, dla danych, które dużą pamięć będzie problemem, ale wierzę, że sqldf może również używać dyskowych dysków. Ponownie, nie użyłem go zbyt wiele, wspomniałem o tym, ponieważ jest to cały pakiet zbudowany wokół koncepcji przesyłania danych do db, wykonywania sql, a następnie zwracania go do R. – joran