Может ли SparkR :: structField () аргумент 'type' быть structType ()? - PullRequest
1 голос
/ 24 февраля 2020

У меня есть следующий фрейм данных искры в R:

df <- SparkR::read.df(path, "json", schema = schema)

Моя схема построена следующим образом:

schema <-
  SparkR::structType(
    structField('visitor_id', 'string'),
    structField('timestamp','string')
    )

Моя проблема состоит в том, что в 'df' есть несколько вложенных столбцов. Столбец метки времени является вложенным, и схема строится неправильно. Текущий заголовок и схема выглядят следующим образом:

schema(df)

StructType
|-name = "visitor_id", type = "StringType", nullable = TRUE
|-name = "timestamp", type = "StringType", nullable = TRUE

Метка времени не должна быть NA

head(df)

  visitor_id timestamp 
1 abc123     <NA>     
2 abc123     <NA>     
3 abc123     <NA>
6 abc123     <NA>

Схема и заголовок должны быть чем-то похожим на приведенный ниже вывод, который я фиктивно создал, где аргумент 'type' в SparkR :: structField () для 'data' и 'udo' является структурами, а не строками:

schema(df)
StructType
|-name = "visitor_id", type = "StringType", nullable = TRUE
|       |-name = " data ", type = struct, nullable = TRUE
        |      |-name = " udo ", type = struct, nullable = TRUE
               |       |-name = " timestamp ", type = "StringType", nullable = TRUE

head(df)
  visitor_id timestamp 
1 abc123     1581949496
2 abc123     1581969492
3 abc123     1581978651
6 abc123     1581912570

Моя попытка построить схему ниже - это когда временная метка существует в два вложенных столбца «data» и «udo», где структура «data» и «udo» - это structTypes, а не строки. Я надеюсь, что аргумент type в structField () может быть чем-то отличным от строки. В документации к пакету и при использовании онлайн-ресурсов я не нашел примеров схем, созданных с помощью SparkR, которые бы работали с неплоскими таблицами json. Есть ли решение этой проблемы с помощью SparkR?

schema1 <-
  SparkR::structType({
    structField('visitor_id', 'string')
    structField('data', structType({
      structField('udo', structType({
        structField('timestamp','string')
      })
      )
    })
    )
  })

Error in structField.character("udo", structType({ : 
  Field type must be a string.
...