首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在Scala中读取列中的行

如何在Scala中读取列中的行
EN

Stack Overflow用户
提问于 2017-07-17 12:22:00
回答 3查看 1.2K关注 0票数 1

我正在做一个将学生数据转换为时间间隔的小项目。程序只是读取数据,并从标记列中选择标记(整数),以便在按升序对它们进行排序后将它们转换为间隔。任何人都可以在这一部分帮助我,非常感谢:

代码:

代码语言:javascript
运行
AI代码解释
复制
import org.apache.spark.sql.functions._
import org.apache.spark.sql.Row


case class Rating(mark: Int, classes: String, schooles: String, name: String)

val Result = sc.textFile("hdfs://schools:9000/input/marks.csv").map(_.split(",")).map(p => Rating(p(0).toInt, p(1).trim, p(2).trim, p(3).trim)).toDF
val all_marks = Result.groupBy("classes", "schooles","name").agg(collect_list("mark") as "marks",count("*") as "cnt").where($"cnt" > 10)

val mrk=all_marks.select("marks")

我需要帮助的部分是:

代码语言:javascript
运行
AI代码解释
复制
mrk.foreach(
    var ascending=mrk.sort
    var interval=ascending[0]+"-"+ascending[ascending.size]
)

如何逐行读取标记,以便对它们进行排序,并将它们转换为间隔。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-17 12:54:51

您可以创建用户定义的函数来从列表中创建新字段作为间隔

下面是一个简单的示例,因为您已经计算了列标记

代码语言:javascript
运行
AI代码解释
复制
import org.apache.spark.sql.functions._
val ddf1 = Seq(List(2,3,1), List(6,4,3)).toDF("marks")

val testUdf = udf((list: Seq[Int]) => {
  val ascending = list.sorted  //sorts in ascending order 
  s"${ascending(0)} - ${ascending(ascending.size - 1)}"
})

ddf1.withColumn("marks", testUdf($"marks"))

输出:

代码语言:javascript
运行
AI代码解释
复制
+-----+
|marks|
+-----+
|1 - 3|
|3 - 6|
+-----+

希望这能有所帮助!

票数 2
EN

Stack Overflow用户

发布于 2017-07-17 13:28:40

可以使用下一种方法来获得这样的结果-将数据帧转换为列表类型的RDD,应用映射函数,然后将RDD转换回数据帧:

代码语言:javascript
运行
AI代码解释
复制
mrk.rdd.map(_.getList[Int](0).toList).map(l => s"${l.min} - ${l.max}").toDF("marks")

注意:getList[Int]返回Java的utils.List类型,要将其转换成Scala的列表,我们必须使用toList方法并导入scala.collection.JavaConversions._

也可以使用DataSet API来代替RDD:

代码语言:javascript
运行
AI代码解释
复制
mrk.map(_.getList[Int](0).toList).map(l => s"${l.min} - ${l.max}").toDF("marks")
票数 1
EN

Stack Overflow用户

发布于 2017-07-17 19:44:28

我需要使用WrappedArray来让UDF正常工作,如下所示:

代码语言:javascript
运行
AI代码解释
复制
case class Rating(mark: Int, classes: String, schooles: String, name: String)

val Result = sc.parallelize(Seq(
  Rating(56, "classA", "SchoolA", "English"),
  Rating(57, "classB", "SchoolA", "English"),
  Rating(58, "classA", "SchoolA", "English"),
  Rating(59, "classB", "SchoolA", "English"),
  Rating(60, "classA", "SchoolA", "English"),
  Rating(61, "classA", "SchoolA", "English"))).toDF()


val toInterval = udf((marks: scala.collection.mutable.WrappedArray[Int]) => s"${marks.min}-${marks.max}")

val all_marks = Result.groupBy("classes", "schooles","name").agg(collect_list("mark") as "marks",count("*") as "cnt")

all_marks.select("marks").withColumn("interval", toInterval(col("marks"))).show()

输出:

代码语言:javascript
运行
AI代码解释
复制
+----------------+--------+
|           marks|interval|
+----------------+--------+
|[56, 58, 60, 61]|   56-61|
|        [57, 59]|   57-59|
+----------------+--------+
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45144208

复制
相关文章
vmware workstation 克隆后网卡eth0不能正常工作
解决方法如下 修改/etc/udev/rules.d/70-persistent-net.rules 将eth0这行注释掉或者删除, 这里记载的还是克隆系统时的MAC地址,但是新启动的系统MAC已经更改, 将NAME="eth1" 改为 “eth0”,ATTR 标记的MAC地址,这个是虚拟机为这个虚拟网卡分配的MAC,用上面的MAC替换掉 /etc/sysconfig/network-scripts /ifcfg-eth0中的MAC 然后重启即可 还有一个办法,不用eth0,直接用eth1等,把/etc/sysconfig/network-scripts/ifcfg-eth0复制成/etc/sysconfig/network-scripts/ifcfg-eth1
三杯水Plus
2018/11/14
2.4K0
建站小技巧|添加了产品为什么不能正常显示?
之前我们有分享过【如何正确的发布文章?】近期许多客户反馈希望能都出几期视频教程,因此本期我们接着分享如何正确发布产品。  为什么添加了产品,预览时无法正常打开? 腾讯云网站建设系统为了更好的满足用户自定义需求,产品详情页排版结构可支持自定义。因此部分企业用户在使用的时候以为我在后台发布了产品,应该就可以正常打开了,实际如需产品正常打开,还需要进行以下步骤操作,下面一起跟着视频了解下吧! ①进入网站编辑页面,添加适合的产品列表模块; ②进入产品管理,添加产品分类,为对应分类添加产品; ③刷新页面,即可自动
腾讯云DNSPod团队
2022/02/08
1.1K0
在ReadWriteLock类中读锁为什么不能升级为写锁?
关于读写锁里面有一个锁升级和降级的问题,也就是写锁可以降级为读锁,但是读锁却不能升级为写锁。那么为什么是这样?
我是攻城师
2018/08/03
3K0
python2中为什么在进行类定义时最好
Person类很明显能够看出区别,不继承object对象,只拥有了doc , module 和 自己定义的name变量, 也就是说这个类的命名空间只有三个对象可以操作. Animal类继承了object对象,拥有了好多可操作对象,这些都是类中的高级特性。
py3study
2020/01/09
1.2K0
图片路径中含有中文在jsp下不能正常显示
如:<img src="/pic/lupload/img工行上传.jpg" />,图片路径正确,放到一个单独的html页面中也能正常打开,在jsp中就是不显示图片
西门呀在吹雪
2020/11/09
1.3K0
Linux下shell不能正常执行
看上面信息【with CRLF line terminators】,大概能定位到问题
小码匠
2022/06/16
4.3K0
错题本:ConstraintLayout 不能正常显示
这个属性是 app:layout_constraintLeft_toLeftOf="@id/oa_setting_group_tv_add" 写成了自己在自己左边了。
佛系编码
2019/12/11
1.9K0
错题本:ConstraintLayout 不能正常显示
Java 为什么设计成 String 不能用 == 来进行比较
给一个小技巧,Java 的基本数据类型就是下面这些,这些数据类型是可以直接用 CPU 进行计算的。
HoneyMoose
2021/08/17
4450
Java 为什么设计成 String 不能用 == 来进行比较
uploadifive参数fileType不能正常解析
鉴于html5已经是主流,flash终究是快湮灭了。所以现在上传也从uploadify更换成了uploadifive了,价值5美刀。在上传的过程中经常需要限制上传文件的类型,就需要用到参数fileType,于是就看下了官方手册上的介绍,文档上的对fileType参数定义的类型是string,且不是必须参数。经过拷贝demo的代码,发现根本无效,任何文件类型还是能够被上传。结果耗时3小时15分钟,翻遍国内外技术网站,最终确认uploadifive的fileType参数是个BUG,官方文档也标错了。经过反复测试,要想实现文件格式限制效果,需要使用json类型数据进行配置,才能实现参数正常解析。
世纪访客
2018/08/02
1K0
uploadifive参数fileType不能正常解析
$(document).click() 在苹果手机上不能正常运行解决方案
本来是如下一段跳转代码,发现在安卓和微信开发者工具上都能正常运行,但是苹果手机就不行了。
全栈程序员站长
2022/07/08
3380
抽象类为什么不能被实例化?
首先,语法上,抽象类不能被实例化,这是语法规定。强制实例化一个抽象类的代码,编译器会报错。
用户6557940
2023/09/06
7260
抽象类为什么不能被实例化?
为什么redis哨兵集群只有2个节点无法正常工作?
由于redis的响应速度快,每秒支持的并发极高(号称10万),现在redis越来越流行了
JAVA葵花宝典
2019/11/08
7.9K1
配置SSL证书后,Nginx的HTTPS 不能正常工作的原因有哪些
申请ssl证书,配置nginx支持https与证书,可是访问https的nginx总是出现错误,也导致小程序发https请求失败,这是什么原因呢?
网盾JoySSL小张
2023/08/31
4.9K0
vue在IE下无法正常工作,Promise未定义?
用vue写了一个日历组件,在Firefox、Edge、Chrome以及360等浏览器极速模式中运行一切正常,如图:
Yiiven
2022/12/15
4.2K0
vue在IE下无法正常工作,Promise未定义?
正常的工作流程
修改文件,将它们更新的内容添加到索引中。 $ git add file1 file2 file3 你现在为commit做好了准备,你可以使用git diff命令再加上–cached参数,看看哪些文件将被提交(commit)。 (如果没有–cached参数,git diff会显示当前你所有已做的但没有加入到索引里的修改。)你也可以使用git status命令来获得当前项目的一个状况。
用户3004328
2018/09/06
7570
记录一下fail2ban不能正常工作的问题 & 闲扯安全
在加载配置这个事情上,许多linux应用程序只需要发一个信号,应用自己就完成配置重载,无需重启中断服务,但是依然有很多程序并不支持。
horsley
2022/08/16
3.6K0
类成员模板函数为什么不能被 virtual 修饰
问题 类成员模板函数为什么不能被 virtual 修饰?比如下面的代码会编译不通过, class Animal{ public: template<typename T> virtual void make_sound(){ //... } }; 回答 模板是编译期生成实例化的,虚函数是运行期才能确定下来的,这就出现矛盾了。
ClearSeve
2022/02/10
1.1K0
为什么一个类不能随意被继承?
我们还是来看看相对通俗点儿的定义。 里氏替换原则(Liskov Substitution Principle,LSP)可以解释为:
程序视点
2023/09/13
2090
为什么一个类不能随意被继承?
晶振为什么不能放置在PCB边缘?
某行车记录仪,测试的时候要加一个外接适配器,在机器上电运行测试时发现超标,具体频点是84MHz、144MHz、168MHz,需要分析其辐射超标产生的原因,并给出相应的对策,辐射测试数据如下:
AI 电堂
2022/12/08
3740
晶振为什么不能放置在PCB边缘?
为什么在静态方法中不能使用this
在JVM的运行时数据区中有个虚拟机栈(或Java栈),在它的里面是由栈帧'叠加'而成.栈帧由局部变量表,操作数栈,动态连接,方法返回地址等组成.
书唐瑞
2022/06/02
1.9K0
为什么在静态方法中不能使用this

相似问题

具有@Input的Angular5属性绑定数组

10

MySQL - JSON -返回值等于true的属性

15

仅当位值等于true时,计算属性的值

11

厨师only_if属性等于true

25

等于true的查询值。

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文