Trong ví dụ sau, tôi đã tải một tệp lát gỗ có chứa một bản ghi lồng nhau của các đối tượng bản đồ trong trường meta
. sparklyr
dường như làm một công việc tốt đẹp để giải quyết những vấn đề này. Tuy nhiên tidyr::unnest
không dịch sang SQL (hoặc HQL - dễ hiểu - như LATERAL VIEW explode()
) và do đó không thể sử dụng được. Có cách nào để dữ liệu không cần thiết theo cách khác không?Có cách nào để xử lý dữ liệu lồng nhau với sparklyr không?
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>
Ngoài ra còn có vấn đề khi thu thập dữ liệu. Ví dụ:
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]
Ở phía trên, các tập tin meta
vẫn chứa spark_jobj
yếu tố thay vì danh sách, data.frames, hoặc thậm chí chuỗi JSON (đó là cách Hive sẽ trả lại dữ liệu như vậy). Điều này tạo ra một tình huống mà tại đó tidyr
thậm chí không hoạt động trên dữ liệu đã thu thập.
Có cách nào để có được sparklyr
để hoạt động độc đáo hơn với tidyr
mà tôi bị thiếu không? Nếu không, kế hoạch này có được triển khai cho tương lai phát triển sparklyr
không?