Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.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
Scala Cassandra使用Spark连接到蜂箱_Scala_Apache Spark_Cassandra_Spark Dataframe_Spark Cassandra Connector - Fatal编程技术网

Scala Cassandra使用Spark连接到蜂箱

Scala Cassandra使用Spark连接到蜂箱,scala,apache-spark,cassandra,spark-dataframe,spark-cassandra-connector,Scala,Apache Spark,Cassandra,Spark Dataframe,Spark Cassandra Connector,我有一个如下所示的cassandra表,希望使用一些条件从cassandra获取记录,并将其放入hive表中 卡桑德拉表格(员工)条目: 假设此表列为数据类型字符串。 我们在hive中也有相同的模式 现在我想将2017041801到2017041804之间的cassandra记录导入hive或hdfs。在第二次运行中,我将基于上一次运行提取增量记录 我能够使用下面的语法将cassandra数据加载到RDD中 val sc = new SparkContext(conf) val rdd = sc

我有一个如下所示的cassandra表,希望使用一些条件从cassandra获取记录,并将其放入hive表中

卡桑德拉表格(员工)条目: 假设此表列为数据类型字符串。 我们在hive中也有相同的模式

现在我想将2017041801到2017041804之间的cassandra记录导入hive或hdfs。在第二次运行中,我将基于上一次运行提取增量记录

我能够使用下面的语法将cassandra数据加载到RDD中

val sc = new SparkContext(conf)
val rdd = sc.cassandraTable("mydb", "Employee")
现在,我的问题是如何根据between条件过滤这些记录,并将过滤后的记录保留在配置单元或配置单元外部表路径中

不幸的是,我的时间列不是cassandra表中的集群键。所以我不能使用.where()子句

我不熟悉这个scala和spark。因此,请在这个过滤器逻辑上提供帮助,或者使用dataframe实现这个逻辑的任何其他更好的方法,请让我知道

提前谢谢

  • 我建议使用Connector Dataframe API从C*加载
  • 对谓词使用df.filter()调用
  • 方法将数据存储在配置单元中
  • 下面是spark 2.0的例子

    val df = spark
      .read
      .format("org.apache.spark.sql.cassandra")
      .options(Map( "table" -> "Employee", "keyspace" -> "mydb" ))
      .load()
    df.filter("time between 2017041801 and 2017041804")
      .write.mode("overwrite").saveAsTable("hivedb.employee");
    

    您可以在spark本身中进行过滤,这里将介绍一些内容:保存到蜂巢,谢谢@Artem Aliev
    val df = spark
      .read
      .format("org.apache.spark.sql.cassandra")
      .options(Map( "table" -> "Employee", "keyspace" -> "mydb" ))
      .load()
    df.filter("time between 2017041801 and 2017041804")
      .write.mode("overwrite").saveAsTable("hivedb.employee");