scala - 如何在 Spark 中处理 Cassandra“持续时间”数据类型?
问题描述
我在使用 datastacks/spark-cassandra-connector 将 Cassandra (Scylla) 数据加载到 Apache Spark 时遇到问题:
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)
我用 Scala 和 Python 尝试了不同的 Spark 和 spark-cassandra-connector 版本,但没有成功。我猜是因为 datastacks/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
)
在这种情况下,有人知道如何处理 Cassandra 的持续时间数据类型吗?
解决方案
Spark 支持的类型定义不包含 Duration,但它们声明
您可以将符合 CQL 标准的字符串转换为数字、日期、地址或 UUID。
此外,Java 驱动程序已经有了Duration 类,它的构造函数将字符串值转换为duration
. 考虑到这一点,您应该能够创建类似于此处示例的自定义 Spark 连接器。
- 我不是 Spark 用户,建议仅基于文档。
推荐阅读
- javascript - 尝试在 anular 上实现 jquery 时未定义 $
- javascript - 为什么 appendChild 会根据元素的顺序发生变化?
- c# - 为什么我在 C# 的 Nuget BigInteger 1.0.7 中出现 System.ArithmeticException?
- reactjs - Apollo 本地状态 - 如何通过 id 查询
- css - Flexbox:让项目扩展以填充行
- node.js - Webpack 开发服务器 PFX 配置
- mysql - 无法在本地主机上同时显示 drupal 控制台和 phpmyadmin
- c# - 在瀑布对话框中使用 luis 验证提示(Bot 框架 V4)
- image - 如何通过单击按钮在一张纸上打印出来
- flutter - 如何在后台模式下访问sql