Scala 如何从DataFrame中的列(如JDBC中的ResultSet)访问值?
假设在jdbc中,我可以编写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
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