Sparklyr: ¿cómo explotar una columna de lista en sus propias columnas en la tabla de Spark?
Mi pregunta es similar a la deaquí, pero tengo problemas para implementar la respuesta y no puedo comentar en ese hilo.
Entonces, tengo un gran archivo CSV que contiene datos anidados, que contiene 2 columnas separadas por espacios en blanco (digamos que la primera columna es Y, la segunda columna es X). La propia columna X también es un valor separado por comas.
21.66 2.643227,1.2698358,2.6338573,1.8812188,3.8708665,...
35.15 3.422151,-0.59515584,2.4994135,-0.19701914,4.0771823,...
15.22 2.8302398,1.9080592,-0.68780196,3.1878228,4.6600842,...
...
Quiero leer este CSV en 2 tablas diferentes de Spark usandosparklyr
.
Hasta ahora esto es lo que he estado haciendo:
Utilizarspark_read_csv
para importar todo el contenido CSV en la tabla de datos de Spark
df = spark_read_csv(sc, path = "path", name = "simData", delimiter = " ", header = "false", infer_schema = "false")
El resultado es una tabla de Spark llamadasimData
con 2 columnas:C0
yC1
Utilizardplyr
para seleccionar la primera y segunda columna, y luego registrarlas como nuevas tablas llamadas Y y X respectivamente
simY <- df %>% select(C0) %>% sdf_register("simY")
simX <- df %>% select(C1) %>% sdf_register("simX")
Dividir el valor ensimX
utilizandoft_regex_tokenizer
función, con respecto a la respuesta escrita enaquí.
ft_regex_tokenizer(input_DF, input.col = "COL", output.col = "ResultCols", pattern = '\\###')
Pero cuando trato dehead
usandodplyr
:
Source: query [6 x 1]
Database: spark connection master=yarn-client app=sparklyr local=FALSE
Result
<list>
1 <list [789]>
2 <list [789]>
3 <list [789]>
4 <list [789]>
5 <list [789]>
6 <list [789]>
Quiero convertir esto en una nueva tabla de Spark y convertir el tipo a doble. ¿Hay alguna forma de hacer esto? He consideradocollect
los datos en R (usandodplyr
), convertir a matriz y luego hacerstrsplit
para cada fila, pero creo que esto no es una solución porque el tamaño de CSV puede subir hasta 40 GB.
EDITAR: la versión de Spark es 1.6.0