次の例では、meta
フィールドにマップオブジェクトのネストされたレコードを含む寄木張りファイルをロードしました。 sparklyr
はこれらを扱う素晴らしい仕事をしているようです。しかしtidyr::unnest
はSQL(またはHQL - わかりやすく - LATERAL VIEW explode()
のように)に翻訳されず、したがって使用できません。他の方法でデータを無効にする方法はありますか?sparklyrでネストされたデータを処理する方法はありますか?
tfl <- head(tf)
tfl
Source: query [?? x 10]
Database: spark connection master=yarn-client app=sparklyr local=FALSE
trkKey meta sources startTime
<chr> <list> <list> <list>
1 3juPe-k0yiMcANNMa_YiAJfJyU7WCQ3Q <S3: spark_jobj> <list [24]> <dbl [1]>
2 3juPe-k0yiAJX3ocJj1fVqru-e0syjvQ <S3: spark_jobj> <list [1]> <dbl [1]>
3 3juPe-k0yisY7UY_ufUPUo5mE1xGfmNw <S3: spark_jobj> <list [7]> <dbl [1]>
4 3juPe-k0yikXT5FhqNj87IwBw1Oy-6cw <S3: spark_jobj> <list [24]> <dbl [1]>
5 3juPe-k0yi4MMU63FEWYTNKxvDpYwsRw <S3: spark_jobj> <list [7]> <dbl [1]>
6 3juPe-k0yiFBz2uPbOQqKibCFwn7Fmlw <S3: spark_jobj> <list [19]> <dbl [1]>
# ... with 6 more variables: endTime <list>, durationInMinutes <dbl>,
# numPoints <int>, maxSpeed <dbl>, maxAltitude <dbl>, primaryKey <chr>
データを収集する際にも問題があります。例えば、
上記でtfl <- head(tf) %>% collect()
tfl
# A tibble: 6 × 10
trkKey meta sources startTime
<chr> <list> <list> <list>
1 3juPe-k0yiMcANNMa_YiAJfJyU7WCQ3Q <S3: spark_jobj> <list [24]> <dbl [1]>
2 3juPe-k0yiAJX3ocJj1fVqru-e0syjvQ <S3: spark_jobj> <list [1]> <dbl [1]>
3 3juPe-k0yisY7UY_ufUPUo5mE1xGfmNw <S3: spark_jobj> <list [7]> <dbl [1]>
4 3juPe-k0yikXT5FhqNj87IwBw1Oy-6cw <S3: spark_jobj> <list [24]> <dbl [1]>
5 3juPe-k0yi4MMU63FEWYTNKxvDpYwsRw <S3: spark_jobj> <list [7]> <dbl [1]>
6 3juPe-k0yiFBz2uPbOQqKibCFwn7Fmlw <S3: spark_jobj> <list [19]> <dbl [1]>
# ... with 6 more variables: endTime <list>, durationInMinutes <dbl>,
# numPoints <int>, maxSpeed <dbl>, maxAltitude <dbl>, primaryKey <chr>
tfl %>% unnest(meta)
Error: Each column must either be a list of vectors or a list of data frames [meta]
は、meta
ファイルがまだspark_jobj
要素の代わりに、リスト、data.frames、または(ハイブは、このようなデータを返す方法です)でも、JSON文字列が含まれています。これは、tidyr
が収集されたデータでさえも機能しない状況を作り出します。
私が紛失しているtidyr
でsparklyr
をよりうまく機能させる方法はありますか?そうでない場合、これは将来のために計画されていますsparklyr
?