如何将 cassandraRow 转换为 Row(apache spark)?
Posted
技术标签:
【中文标题】如何将 cassandraRow 转换为 Row(apache spark)?【英文标题】:How to convert cassandraRow into Row (apache spark)? 【发布时间】:2016-05-09 11:47:37 【问题描述】:我正在尝试从 RDD[cassandraRow] 创建一个 Dataframe。但我不能因为 createDataframe(RDD[Row],schema: StructType) 需要 RDD[Row] 而不是 RDD[cassandraRow ].
我怎样才能做到这一点?也根据这个问题的答案 How to convert rdd object to dataframe in spark
(答案之一)关于在 RDD[Row] 上使用 toDF() 从 RDD 获取数据帧的建议对我不起作用。我尝试在另一个示例中使用 RDD[Row] (尝试使用 toDF() )。
我也不知道如何使用 RDD ( RDD[Row] ) 实例调用 Dataframe ( toDF() ) 的方法?我正在使用 Scala。
【问题讨论】:
你试过了吗:import sqlContext.implicits._rdd.toDF()? 是的.. 我做了.. 但仍然没有得到 toDF() inelligence(可用方法).. 导入 sqlContext.implicits._ 对于访问所有额外方法(如 toDF())很重要 我知道它是..我正在更新我的问题中的代码..如果可以的话请帮助我..谢谢..val sqlContext = new org.apache.spark.sql.SQLContext(sc);
import sqlContext.implicits._
【参考方案1】:
如果您真的需要这个,您可以随时将数据映射到 Spark 行:
sqlContext.createDataFrame(
rdd.map(r => org.apache.spark.sql.Row.fromSeq(r.columnValues)),
schema
)
但是如果你想要DataFrames
最好直接导入数据:
val df = sqlContext
.read
.format("org.apache.spark.sql.cassandra")
.options(Map( "table" -> table, "keyspace" -> keyspace))
.load()
【讨论】:
你也可以在你的表格中读作sc.cassandraTable[SomeCaseClass]
,但上面的直接方法是最好的:)
@zero323 谢谢..您的答案(代码)工作正常。是的..我知道数据框可以像你展示的那样直接实现。但情况是(有问题的图片只是演示),我的数据库端可能有一个很大的表,但我想要几行。所以根据我的理解,我们有两个场景需要考虑,要么我们可以在 RDD 中获取它,要么首先制作 Dataframe,然后从中获取这些行。我选择 RDD 方式,因为(据我所知)我们直接在 DB 上触发查询,继续...
Continue.. 这样数据(表)将根据数据库端的操作进行排序,并且只返回 ResultSet。但是如果我们使用 Dataframe,它首先将整个表加载到内存中,然后对其执行查询。所以我们认为如果我们只需要非常大的表中的几行,我们应该使用 RDD。 *如果我对上述理解有误,您可以帮助我,用您的知识纠正我。谢谢你..!
@RussS,这将如何运作?我不确定SomeCaseClass
需要知道要读取哪个表...以上是关于如何将 cassandraRow 转换为 Row(apache spark)?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 MySQL 语法 WITH `cte` AS (VALUES ROW(1), ROW(2), ROW(n)) 转换为 jOOQ DSL?