Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cassandra DB上存储的JSON对象上的查询spark_Json_Apache Spark_Cassandra_Time Series - Fatal编程技术网

Cassandra DB上存储的JSON对象上的查询spark

Cassandra DB上存储的JSON对象上的查询spark,json,apache-spark,cassandra,time-series,Json,Apache Spark,Cassandra,Time Series,我在cassandra DB上构建了这个结构来存储操作系统数据的时间序列数据,比如服务、进程和其他信息。为了理解如何使用Cassandra存储JSON数据并通过CQL查询检索数据,我更倾向于简化模型。因为在total model DB中,我将使用比report_对象更复杂的类型,例如hashMap数组的hashMap: 键入NETSTAT-->对象[n]-->{host:192.168.0.23,协议:TCP,LocalAddress:0.0.0} 因此,NETSTAT类型将有一个hashMap

我在cassandra DB上构建了这个结构来存储操作系统数据的时间序列数据,比如服务、进程和其他信息。为了理解如何使用Cassandra存储JSON数据并通过CQL查询检索数据,我更倾向于简化模型。因为在total model DB中,我将使用比report_对象更复杂的类型,例如hashMap数组的hashMap: 键入
NETSTAT-->对象[n]-->{host:192.168.0.23,协议:TCP,LocalAddress:0.0.0}
因此,NETSTAT类型将有一个hashMaps列表,其中包含key->value字段。 为了简化,我选择显示以下模式:

CREATE TYPE report_object (RTIME varchar, RMINORVER int, RUSER varchar, RLANG varchar, RSCRIPT varchar, RMAJORVER int, RHOST varchar, RPATH varchar);
CREATE TABLE test (
REPORTUUID uuid PRIMARY KEY,
report frozen<report_object>);
我用上面的查询处理了其他数据。 澄清我的概念的问题有: -我想使用检查定义的内部类型的条件进行查询,是否可以使用CQL,或者是否有必要使用spark SQL

  • 设计数据库模型是否适合这个目的(因为我已经从RDBMS传递到了DB NoSQL)

要使用Cassandra查询用户定义的类型,必须首先创建索引:

CREATE INDEX on test.test(report);
但它只允许基于完整文档的谓词:

SELECT * FROM test
WHERE report=fromJson('{"RTIME":"6/MAR/2016 6:0:0 PM","RMINORVER":0,"RUSER":"Administrator","RLANG":"vbs","RSCRIPT":"Main","RMAJORVER":5,"RHOST":"WIN-SAPV9MUEMNS","RPATH":"C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\IXP000.TMP"}');
您将在中找到更多详细信息和解释

当使用Spark曝光时,可使用
CassandraTableScanRDD上的过滤器过滤这些值:

val rdd = sc.cassandraTable("test", "test")
rdd.filter(row =>
  row.getUDTValue("report").getString("rscript") == "Main")
其中
/
过滤器
位于
数据帧上

df.where($"report.rscript" === "Main")

尽管使用Spark这样的查询,但必须先获取整个表,然后才能过滤数据。虽然目前还不清楚您到底想要实现什么,但这不太可能是一个有用的结构。

是否需要Scala语言来查询数据?使用Java语言可以吗?当您用equals替换
=
时,DataFrame API应该可以立即运行
CassandraRDD
将需要一个自定义函数,但我看不出它不起作用的任何原因。能否为我提供一个教程或指南,通过Java语言的Cassandra结构中的查询对检索数据进行测试?谢谢
df.where($"report.rscript" === "Main")