Eu tenho quadros 10 dados pyspark.sql.dataframe.DataFrame
, obtidos a partir randomSplit
de (td1, td2, td3, td4, td5, td6, td7, td8, td9, td10) = td.randomSplit([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1], seed = 100)
agora eu quero participar 9 td
é em um único quadro de dados, como devo fazer isso?
Eu já tentei com unionAll
, mas essa função aceita apenas dois argumentos.
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)
Existe alguma maneira de combinar mais de dois quadros de dados em linhas?
O objetivo é fazer 10 vezes a validação cruzada manualmente, sem usar o CrossValidator
método PySpark . Portanto, levo 9 para o treinamento e 1 para os dados de teste e depois repetirei para outras combinações.
python
apache-spark
cross-validation
pyspark
Krishna Prasad
fonte
fonte
Respostas:
Roubado de: /programming/33743978/spark-union-of-multiple-rdds
Fora dos sindicatos em encadeamento, essa é a única maneira de fazê-lo nos DataFrames.
O que acontece é que ele pega todos os objetos que você passou como parâmetros e os reduz usando unionAll (essa redução é do Python, não o Spark, embora eles funcionem da mesma forma), o que eventualmente o reduz a um DataFrame.
Se, em vez dos DataFrames, eles são RDDs normais, você pode passar uma lista deles para a função de união do seu SparkContext
EDIT: Para seu propósito, proponho um método diferente, já que você teria que repetir toda essa união 10 vezes para suas dobras diferentes para validação cruzada, adicionaria rótulos aos quais pertence uma dobra de uma linha e apenas filtraria seu DataFrame para cada dobra com base em o rótulo
fonte
Em algum momento, quando os quadros de dados a serem combinados não tiverem a mesma ordem de colunas, é melhor df2.select (df1.columns) para garantir que ambos os df tenham a mesma ordem de coluna antes da união.
Exemplo:
caso contrário, geraria o resultado abaixo.
fonte
Que tal usar recursão?
fonte