Как справиться с типом «продолжительности» Кассандры в Spark? - PullRequest
0 голосов
/ 27 февраля 2020

У меня проблема с загрузкой данных Cassandra (Scylla) в Apache Spark с хранилищем данных / spark-cassandra-разъем:

scala> val rdd = sc.cassandraTable[(String)](keyspace, table).select("url").limit(10).collect()
java.util.NoSuchElementException: key not found: duration
at scala.collection.MapLike$class.default(MapLike.scala:228)
at scala.collection.AbstractMap.default(Map.scala:59)
at scala.collection.MapLike$class.apply(MapLike.scala:141)
at scala.collection.AbstractMap.apply(Map.scala:59)
at com.datastax.spark.connector.types.ColumnType$$anonfun$1.applyOrElse(ColumnType.scala:117)

Я пробовал разные версии Spark и spark-cassandra-разъем с Scala и Python но безуспешно. Я думаю, это из-за отсутствия поддержки типов данных продолжительности в наборах данных / spark-cassandra-connector, я проверил ColumnType. scala, они имеют только:

  private[connector] val primitiveTypeMap = Map[DataType, ColumnType[_]](
    DataType.text() -> TextType,
    DataType.ascii() -> AsciiType,
    DataType.varchar() -> VarCharType,
    DataType.cint() -> IntType,
    DataType.bigint() -> BigIntType,
    DataType.smallint() -> SmallIntType,
    DataType.tinyint() -> TinyIntType,
    DataType.cfloat() -> FloatType,
    DataType.cdouble() -> DoubleType,
    DataType.cboolean() -> BooleanType,
    DataType.varint() -> VarIntType,
    DataType.decimal() -> DecimalType,
    DataType.timestamp() -> TimestampType,
    DataType.inet() -> InetType,
    DataType.uuid() -> UUIDType,
    DataType.timeuuid() -> TimeUUIDType,
    DataType.blob() -> BlobType,
    DataType.counter() -> CounterType,
    DataType.date() -> DateType,
    DataType.time() -> TimeType
  )

Кто-нибудь знает, как обращаться с типом данных продолжительности Кассандры в это дело?

1 Ответ

0 голосов
/ 29 февраля 2020

Поддерживаемое Spark определение types не содержит Duration, но они утверждают, что

Вы можете преобразовывать строки, соответствующие стандарту CQL, в числа, даты, адреса или UUID. .

Кроме того, драйвер Java уже имеет класс Duration , конструктор которого преобразует строковые значения в duration. Имея это в виду, вы должны иметь возможность создать собственный соединитель Spark, аналогичный примеру здесь .

  • Я не пользователь Spark, предложение основано только на документация.
...