Scala 如何从DataFrame中的列(如JDBC中的ResultSet)访问值?

Scala 如何从DataFrame中的列(如JDBC中的ResultSet)访问值?,scala,apache-spark,cassandra,apache-spark-sql,Scala,Apache Spark,Cassandra,Apache Spark Sql,假设在jdbc中,我可以编写result.getString(1)来读取每一列。spark dataframe中是否有这样的概念 例: 我需要提取每一列,并使用Cassandra编写的语句插入Cassandra 有人能帮我吗?假设您有一个案例类,如下所示: case class Person(id: Int, name: String, gender: String, address: String) 因此,对于您的查询,您可以 val results = sqlContext.sql("se

假设在jdbc中,我可以编写
result.getString(1)
来读取每一列。spark dataframe中是否有这样的概念

例:

我需要提取每一列,并使用Cassandra编写的语句插入Cassandra


有人能帮我吗?

假设您有一个案例类,如下所示:

case class Person(id: Int, name: String, gender: String, address: String)
因此,对于您的查询,您可以

val results = sqlContext.sql("select id, name,gender,address from ex_table2 ")
val personList = results.map(row => Person(row.getAs[Int]("id"), r.getAs[String]("name"), r.getAs[String]("gender"), r.getAs[String]("address"))

现在,您可以使用
personList
并将其存储到Cassandra中。

您的
exu表是一个
数据框,它是一个
数据集[行]

数据集是特定于域的对象的强类型集合,可以使用函数或关系操作并行转换。每个数据集还有一个称为DataFrame的非类型化视图,它是行的数据集

Dataset
具有
foreach
运算符(以及许多其他运算符),允许您访问底层的
s

ex_table.foreach { row => ... }
给定
foreach
操作符用于诸如保存到Cassandra数据库之类的副作用,就完成了

foreach(f:(T)⇒ 单位):单位将函数f应用于所有行

foreach
中,您可以访问
(类似于JDBC中的
ResultSet
),该行有
getAs
等方法:

getAs[T](i:Int):T返回位置i处的值

您的代码将如下所示:

ex_table.foreach { row => 
  val fieldOne = row.getAs(1)
  // Save the fieldOne and others to Cassandra
}
DataStax火花卡桑德拉连接器 但是,我建议使用以下软件包:

该库允许您将Cassandra表公开为Spark RDD,将Spark RDD写入Cassandra表,并在Spark应用程序中执行任意CQL查询

使用此库,您可以轻松地编写数据帧,如下所示:

ex_table.
  write.
  format("org.apache.spark.sql.cassandra").
  options(Map( "table" -> "words", "keyspace" -> "test" , "cluster" -> "ClusterOne")).
  save

ex_table.
  write.
  format("org.apache.spark.sql.cassandra").
  options(Map( "table" -> "words", "keyspace" -> "test" , "cluster" -> "ClusterOne")).
  save