Como desnaturar dados com o SparkR?

UsandoSparkR como matrizes aninhadas podem ser "explodidas"? Eu tentei usarexplode igual a:

 dat <- nested_spark_df %>% 
     mutate(a=explode(metadata)) %>%
     head()

mas, embora o acima não cause uma exceção, ele não promove os campos aninhados emmetadata para o nível superior. Basicamente, estou buscando um comportamento semelhante ao do HiveLATERAL VIEW explode() funcionalidade sem depender deHiveContext.

Observe que no snippet de código eu estou usando o NSE ativado viaSparkRext. Eu acho que o equivalenteSparkR seria algo como... %>% mutate(a=explode(nested_spark_df$metadata)) ... Ou algo nesse sentido.

EDITAR

Eu tentei usarLATERAL VIEW explode(...) noSparkR::sql função. Parece funcionar muito bem com dados do Parquet e ORC. No entanto, ao trabalhar com dados Avro aninhados, tentei:

dat <- collect(sql(HiveContext,
                   paste0("SELECT a.id, ax.arrival_airport, x.arrival_runway ",
                          "FROM avrodb.flight a ",  
                             "LATERAL VIEW explode(a.metadata) a AS ax ",
                          "WHERE ax.arrival_airport='ATL'")))

Apenas para obter o seguinte erro, embora quando uma trocaavrodb comparquetdb contendo dados equivalentes, ele faz o que eu espero.

Error in invokeJava(isStatic = TRUE, className, methodName, ...) :
  org.apache.spark.SparkException: Job aborted due to stage failure: Task 4 in stage 5.0 failed 4 times, most recent failure: Lost task 4.3 in stage 5.0 (TID 1345, dev-dn04.myorg.org): org.apache.avro.AvroTypeException: Found metadata, expecting union
    at org.apache.avro.io.ResolvingDecoder.doAction(ResolvingDecoder.java:292)
    at org.apache.avro.io.parsing.Parser.advance(Parser.java:88)
    at org.apache.avro.io.ResolvingDecoder.readIndex(ResolvingDecoder.java:267)
    at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:155)
    at org.apache.avro.generic.GenericDatumReader.readArray(GenericDatumReader.java:219)
    at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:153)
    at org.apache.avro.generic.GenericDatumReader.read(GenericDatumReader.java:155)
    at org.apache.avro.generic.GenericDatumReader.readField(GenericDatumReader.java:193)
    at org.apache.avro.generic.GenericDatumReader.readRecord(GenericDatumReader.java:183)
    at org.apache.avr
Calls: <Anonymous> ... collect -> collect -> .local -> callJStatic -> invokeJava

Apesar do fato de eu ter incluído o pacote DataBricks Avro ao iniciar o Spark. Lendo os mesmos dados com o spark usando umSQLContext (ao invés deHiveContext) funciona bem, exceto que eu não consegui descobrir como usar efetivamente oexplode() função. Também confirmei que isso não é um problema com os dados em si, consultando com êxito os mesmos arquivos via Hive usando a mesma instrução HQL com a qual tentei executarSparkR::sql(HiveContext, hql)

questionAnswers(2)

yourAnswerToTheQuestion