如何解决Spark Rdd
我必须在spark中过滤Cassandra表,在通过spark从表中获取数据之后,在返回的rdd上应用filter函数,我们不想在cassandra api中使用where子句可以过滤,但是需要在filter列,由于在cassandra中进行多个ss表扫描,因此存在磁盘开销问题。 例如:
val ct = sc.cassandraTable("keyspace1","table1")
val fltr = ct.filter(x=x.contains "zz")
table1字段为:
- 分散的uuid
- 文件名文本
- 事件诠释
- eventtimestamp bigint
- fileid int
- 文件类型为int
基本上,我们需要基于具有任意字符串的文件名过滤数据。由于返回的rdd是类型
com.datastax.spark.connector.rdd.CassandraTableScanRDD[com.datastax.spark.connector.CassandraRow] = CassandraTableScanRDD
和筛选器操作仅限于enter image description here
CassandraRow
方法
val ct = sc.cassandraTable("keyspace1","table1")
scala> ct
res140: com.datastax.spark.connector.rdd.CassandraTableScanRDD[com.datastax.spark.connector.CassandraRow] = CassandraTableScanRDD[171] at RDD at CassandraRDD.scala:19
当我在“ x”之后点击制表符时。在下面的过滤器函数中,该函数在此处显示了CassandraRow类的以下输入方法
scala> ct.filter(x=>x.
columnValues getBooleanOption getDateTime getFloatOption getLongOption getString getUUIDOption length
contains getByte getDateTimeOption getInet getMap getStringOption getVarInt metaData
copy getByteOption getDecimal getInetOption getRaw getTupleValue getVarIntOption nameOf
dataAsString getBytes getDecimalOption getInt getRawCql getTupleValueOption hashCode size
equals getBytesOption getDouble getIntOption getSet getUDTValue indexOf toMap
get getDate getDoubleOption getList getShort getUDTValueOption isNullAt toString
getBoolean getDateOption getFloat getLong getShortOption getUUID iterator
解决方法
您需要从CassandraRow
对象获取字符串字段,然后对其进行过滤。因此,这段代码如下所示:
val fltr = ct.filter(x => x.getString("filename").contains("zz"))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。