如何将 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)?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Array[Row] 转换为 RDD[Row]

如何将 seq[row] 转换为 scala 中的数据框

如何将 RDD[Row] 转换为 RDD[Vector]

如何将 MySQL 语法 WITH `cte` AS (VALUES ROW(1), ROW(2), ROW(n)) 转换为 jOOQ DSL?

如何将类型 <class 'pyspark.sql.types.Row'> 转换为 Vector

如何在 Spark 2 Scala 中将 Row 转换为 json