Spark/Scala 中将 RDD 转换为 Dataframe

2024-01-30

RDD 已按以下格式创建Array[Array[String]]并具有以下值:

val rdd : Array[Array[String]] = Array(
Array("4580056797", "0", "2015-07-29 10:38:42", "0", "1", "1"), 
Array("4580056797", "0", "2015-07-29 10:38:43", "0", "1", "1"))

我想创建一个具有以下架构的数据帧:

val schemaString = "callId oCallId callTime duration calltype swId"

下一步:

scala> val rowRDD = rdd.map(p => Array(p(0), p(1), p(2),p(3),p(4),p(5).trim))
rowRDD: org.apache.spark.rdd.RDD[Array[String]] = MapPartitionsRDD[14] at map at <console>:39
scala> val calDF = sqlContext.createDataFrame(rowRDD, schema)

给出以下错误:

console:45: error: overloaded method value createDataFrame with alternatives:
     (rdd: org.apache.spark.api.java.JavaRDD[_],beanClass: Class[_])org.apache.spark.sql.DataFrame <and>
    (rdd: org.apache.spark.rdd.RDD[_],beanClass: Class[_])org.apache.spark.sql.DataFrame <and>
    (rowRDD: org.apache.spark.api.java.JavaRDD[org.apache.spark.sql.Row],schema: org.apache.spark.sql.types.StructType)org.apache.spark.sql.DataFrame <and>
    (rowRDD: org.apache.spark.rdd.RDD[org.apache.spark.sql.Row],schema: org.apache.spark.sql.types.StructType)org.apache.spark.sql.DataFrame
    cannot be applied to (org.apache.spark.rdd.RDD[Array[String]],   
    org.apache.spark.sql.types.StructType)
       val calDF = sqlContext.createDataFrame(rowRDD, schema)

只需粘贴到spark-shell:

val a = 
  Array(
    Array("4580056797", "0", "2015-07-29 10:38:42", "0", "1", "1"), 
    Array("4580056797", "0", "2015-07-29 10:38:42", "0", "1", "1"))

val rdd = sc.makeRDD(a)

case class X(callId: String, oCallId: String, 
  callTime: String, duration: String, calltype: String, swId: String)

Then map()通过 RDD 创建案例类的实例,然后使用创建 DataFrametoDF():

scala> val df = rdd.map { 
  case Array(s0, s1, s2, s3, s4, s5) => X(s0, s1, s2, s3, s4, s5) }.toDF()
df: org.apache.spark.sql.DataFrame = 
  [callId: string, oCallId: string, callTime: string, 
    duration: string, calltype: string, swId: string]

这从案例类推断模式。

然后您可以继续:

scala> df.printSchema()
root
 |-- callId: string (nullable = true)
 |-- oCallId: string (nullable = true)
 |-- callTime: string (nullable = true)
 |-- duration: string (nullable = true)
 |-- calltype: string (nullable = true)
 |-- swId: string (nullable = true)

scala> df.show()
+----------+-------+-------------------+--------+--------+----+
|    callId|oCallId|           callTime|duration|calltype|swId|
+----------+-------+-------------------+--------+--------+----+
|4580056797|      0|2015-07-29 10:38:42|       0|       1|   1|
|4580056797|      0|2015-07-29 10:38:42|       0|       1|   1|
+----------+-------+-------------------+--------+--------+----+

如果你想使用toDF()在正常程序中(不是在spark-shell),确保(引用自here https://community.cloudera.com/t5/Advanced-Analytics-Apache-Spark/Spark-Scala-Error-value-toDF-is-not-a-member-of-org-apache-spark/td-p/29878):

  • To import sqlContext.implicits._创建后立即SQLContext
  • 使用以下方法在方法外部定义案例类toDF()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark/Scala 中将 RDD 转换为 Dataframe 的相关文章

随机推荐

  • 在运行时转储执行数据

    我正在使用 JaCoCo 生成代码覆盖率报告 并且我有许多场景需要生成单独的报告 问题是该程序非常庞大 大约需要 2 分钟才能启动并加载所有类文件 我想在其中一个场景完成后立即获取运行时的执行数据 然后开始下一个场景 而不是为每个场景重新启
  • 使用 CSS3 堆叠媒体查询

    我正在尝试在 CSS 中堆叠媒体查询 但似乎无法让它正常工作 我想要实现的是拥有一组 css 规则any的媒体询问 我知道通常我可以使用and让它适用于不同的规则 但在这种情况下 我试图处理特定于供应商的前缀 因此浏览器不会满足所有条件 这
  • Rails formtastic 嵌套形式警告:无法批量分配受保护的属性

    我有以下型号 class CapstoneMilestone lt ActiveRecord Base attr accessible capstone id milestone id rank id status statusweight
  • 如何在 C# 中使用“for 循环”和“数组”反转整数

    我是 C 新手 正在学习反转整数 数字 我必须使用 forloop 和数组来完成代码 但我真的不知道如何使用它们 例如 如果输入是 1 2 3 4 5 6结果应该是 6 5 4 3 2 1 有人可以帮帮我吗 谢谢 编辑 我真的很抱歉 我忘记
  • 我可以用一个类名指定多个 CSS 类吗?

    我想在元素上指定几个 css 类 但我不想每次都重复上 3 4 或更多课 我想从 span class class1 backgroundclass borderclass iconclass Link span To span class
  • 意外删除了 Xaml 文件的隐藏代码。如何再次添加后面的代码?

    我没有错误地排除它 而是删除了 Xaml 文件背后的 cs 代码 现在 我不知道如何添加后面的代码 该窗口是空的 上面没有 UI 控件 查看代码 被禁用 我在任何地方都看不到此 xaml 的事件 闪电图标 请帮忙 有两个必需步骤和一个可选步
  • 在 MATLAB 中处理 Kinect 深度数据

    所以我使用 Kinect 获取了一些深度图像 现在将它们保存起来 那么如果我想处理这个深度图像以获得Z值 即物体到Kinect的距离 我应该怎么做 我一直在网上进行一些研究 发现我需要将图像保存为 16 位深度图像才能存储深度值 而不是只能
  • 未调用自定义 UITableVIewCell 初始化

    我有带有一些图像和标签的自定义 UiTablleviewCell 并且我想在 tableview 单元格中旋转标签 所以我想编辑 initWithStyle 方法 但似乎从未调用过它 id initWithStyle UITableView
  • 根据 groupby 之后其他列中的值之间的数据帧范围对单独的列求和

    我有一个数据框如下 id Supply days days 180 1 30 0 180 1 100 183 363 1 80 250 430 2 5 0 180 2 5 10 190 3 5 0 180 3 30 100 280 3 30
  • JQGrid是免费的吗?

    从以下位置下载 JQGrid js 文件http www trirand com blog http www trirand com blog 免费吗 这是什么http www trirand net demoaspnetmvc aspx
  • 安卓屏幕分辨率

    Android 中已经定义了一些屏幕分辨率 他们是 QVGA 240 320 低密度 小屏幕 WQVGA 240 400 低密度 普通屏幕 FWQVGA 240 432 低密度 普通屏幕 HVGA 320 480 中等密度 普通屏幕 WVG
  • NameError:Python 中未定义名称“reduce”

    我正在使用Python 3 2 尝试过这个 xor lambda x y x y 2 l reduce xor 1 2 3 4 并得到以下错误 l reduce xor 1 2 3 4 NameError name reduce is no
  • 什么可能导致 MSIExec 错误 1619“无法打开此安装包”

    我正在尝试从一组示例程序中自动执行一组 MSI 文件 由 WiX 生成 的往返安装和卸载 由于某种原因 双击后会生成一个非常适合安装的 MSI 文件 无法打开该安装包 验证该包是否存在并且您可以访问它 或者联系应用程序供应商以验证这是否是有
  • 在后台获取核心数据

    我有一个带有表视图的导航视图 当单击一行时 行索引路径将传递到下一个视图 在详细信息视图 viewDidLoad 中 我正在从 Core Data 获取数据 我使用从应用程序委托中获取 appDelegate loadItem i 正如你所
  • publicId 和 systemId 之间需要空格

    我试图通过在 jsp 中编写一些代理代码来从我的计算机本地对其他域进行 ajax 调用 这是我调用 proxy jsp 页面的 jQuery AJAX 代码 var metadata https rest search host com m
  • 是否可以从 clickhouse 表中删除旧记录?

    据我所知 clickhouse只允许插入新数据 但是是否可以删除早于某个时间段的块以避免硬盘溢出 轻量级删除 自 v22 8 起可用 MergeTree 表的标准 DELETE 语法已在 37893 https github com Cli
  • 不存在的列不应破坏 select 中的 sql 查询

    就我而言 有不同的数据库版本 SQL Server 例如我的桌子orders有专栏htmltext在版本 A 中 但在版本 B 中列htmltext不见了 Select order id order date htmltext from o
  • 在迭代器中访问 C# 基类会导致 ReSharper 警告

    我有两节课GenericList and SpecificList where SpecificList继承自GenericList GenericList实施IEnumerable
  • WCF双工服务通道关闭

    我有一个基于 WCF Duplex 服务的应用程序 当用户 重新启动 应用程序所做的工作时 我遇到问题 在后台 客户端关闭与 WCF 服务的连接并创建另一个连接 服务合同的定义如下 ServiceContract Namespace net
  • Spark/Scala 中将 RDD 转换为 Dataframe

    RDD 已按以下格式创建Array Array String 并具有以下值 val rdd Array Array String Array Array 4580056797 0 2015 07 29 10 38 42 0 1 1 Arra