Mam 10 ramek danych pyspark.sql.dataframe.DataFrame
, uzyskanych od randomSplit
jak (td1, td2, td3, td4, td5, td6, td7, td8, td9, td10) = td.randomSplit([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1], seed = 100)
Teraz chcę dołączyć 9 td
„s na pojedynczej ramce danych, jak mam to zrobić?
Próbowałem już z unionAll
, ale ta funkcja akceptuje tylko dwa argumenty.
td1_2 = td1.unionAll(td2)
# this is working fine
td1_2_3 = td1.unionAll(td2, td3)
# error TypeError: unionAll() takes exactly 2 arguments (3 given)
Czy istnieje sposób na połączenie więcej niż dwóch ramek danych w rzędzie?
Celem tego jest to, że robię 10-krotną weryfikację krzyżową ręcznie bez użycia CrossValidator
metody PySpark , więc biorąc 9 na trening i 1 na dane testowe, a następnie powtórzę to dla innych kombinacji.
python
apache-spark
cross-validation
pyspark
krishna Prasad
źródło
źródło
Odpowiedzi:
Skradzione z: /programming/33743978/spark-union-of-multiple-rdds
Poza łańcuchami związków jest to jedyny sposób, aby to zrobić dla DataFrames.
Dzieje się tak, ponieważ bierze wszystkie przekazane obiekty jako parametry i redukuje je za pomocą unionAll (ta redukcja pochodzi z Pythona, a nie redukcji Spark, chociaż działają podobnie), co ostatecznie redukuje ją do jednej ramki danych.
Jeśli zamiast DataFrames są one normalnymi RDD, możesz przekazać ich listę do funkcji unii SparkContext
EDYCJA: Dla twojego celu proponuję inną metodę, ponieważ musiałbyś powtórzyć ten cały związek 10 razy dla różnych fałd dla krzyżowej walidacji, dodałbym etykiety, do których należy fałd, i po prostu filtruję twoją ramkę danych dla każdego fałdu na podstawie etykieta
źródło
Czasami, gdy łączone ramki danych nie mają tej samej kolejności kolumn, lepiej jest df2.select (df1.columns), aby upewnić się, że oba df mają tę samą kolejność kolumn przed zjednoczeniem.
Przykład:
w przeciwnym razie wygeneruje poniższy wynik.
źródło
Co powiesz na użycie rekurencji?
źródło