我编写了以下代码:
case class RawPanda(id: Long, zip: String, pt: String, happy: Boolean, attributes: Array[Double])
case class PandaPlace(name: String, pandas: Array[RawPanda])
object TestSparkDataFrame extends App{
System.setProperty("hadoop.home.dir", "E:\\Programmation\\Libraries\\hadoop")
val conf = new SparkConf().setAppName("TestSparkDataFrame").set("spark.driver.memory","4g").setMaster("local[*]")
val session = SparkSession.builder().config(conf).getOrCreate()
import session.implicits._
def createAndPrintSchemaRawPanda(session:SparkSession):DataFrame = {
val newPanda = RawPanda(1,"M1B 5K7", "giant", true, Array(0.1, 0.1))
val pandaPlace = PandaPlace("torronto", Array(newPanda))
val df =session.createDataFrame(Seq(pandaPlace))
df
}
val df2 = createAndPrintSchemaRawPanda(session)
df2.show
+--------+--------------------+
| name| pandas|
+--------+--------------------+
|torronto|[[1,M1B 5K7,giant...|
+--------+--------------------+
val pandaInfo = df2.explode(df2("pandas")) {
case Row(pandas: Seq[Row]) =>
pandas.map{
case (Row(
id: Long,
zip: String,
pt: String,
happy: Boolean,
attrs: Seq[Double])) => RawPanda(id, zip, pt , happy, attrs.toArray)
}
}
pandaInfo2.show
+--------+--------------------+---+-------+-----+-----+----------+
| name| pandas| id| zip| pt|happy|attributes|
+--------+--------------------+---+-------+-----+-----+----------+
|torronto|[[1,M1B 5K7,giant...| 1|M1B 5K7|giant| true|[0.1, 0.1]|
+--------+--------------------+---+-------+-----+-----+----------+
我所使用的爆炸功能的问题已被弃用,因此我想重新计算PandaInfo2数据帧,但在警告中使用建议的方法。
请改用functions.explode
但是当我这么做的时候:
val pandaInfo = df2.select(functions.explode(df("pandas"))
我获得了与df2相同的结果。我不知道如何继续使用平面图或函数。爆炸
如何使用平面图或函数。爆炸以获得我想要的结果?(pandaInfo中的一个)
我看过这篇文章和另一篇文章,但没有一篇对我有帮助。
使用explode函数调用select函数返回一个数据帧,其中数组pandas被“分解”为单独的记录;然后,如果要“展平”每个记录生成的单个“RawPanda”的结构,可以使用点分隔的“路由”选择各个列:
val pandaInfo2 = df2.select($"name", explode($"pandas") as "pandas")
.select($"name", $"pandas",
$"pandas.id" as "id",
$"pandas.zip" as "zip",
$"pandas.pt" as "pt",
$"pandas.happy" as "happy",
$"pandas.attributes" as "attributes"
)
完全相同的操作的不太详细的版本是:
import org.apache.spark.sql.Encoders // going to use this to "encode" case class into schema
val pandaColumns = Encoders.product[RawPanda].schema.fields.map(_.name)
val pandaInfo3 = df2.select($"name", explode($"pandas") as "pandas")
.select(Seq($"name", $"pandas") ++ pandaColumns.map(f => $"pandas.$f" as f): _*)
我有一个由66个变量的10299个观测值组成的数据框。其中一些变量共享一个通用的列名,我想计算每个观测值的这些变量的平均值。 具有以下矩阵,列名: 我想得到: 我尝试了循环,命令,但没有得到所需的结果。 抱歉,如果这个问题看起来太基本了,我已经在谷歌上查过可能的解决方案,但没有找到任何解决方案。
关于元数据 元数据是一组有关文件的标准化信息,如作者姓名、分辨率、色彩空间、版权以及为其应用的关键字。例如,大多数数码相机将一些基本信息附加到图像文件中,如高度、宽度、文件格式以及图像的拍摄时间。您可以使用元数据来优化工作流程以及组织文件。 关于 XMP 标准 元数据信息是使用可扩展元数据平台 (XMP) 标准进行存储的,Adobe Bridge、Adobe Illustrator、Adobe I
我正在使用下面链接中的代码来平整嵌套的数据帧在Scala中平整一个数据帧,里面有不同的数据类型....我得到以下错误: 代码:
我想展平元组的RDD(使用无操作映射),但我得到了一个类型错误: 给予 错误:类型不匹配; 找到:(Int,String)必需:TraversableOnce[?] ap.flat地图(x= s或s的等效列表可以正常工作,例如: Scala能处理吗?如果没有,为什么没有?
本文向大家介绍使用C++扩展Python的功能详解,包括了使用C++扩展Python的功能详解的使用技巧和注意事项,需要的朋友参考一下 本文主要研究的是使用C++扩展Python的功能的相关问题,具体如下。 环境 VS2005Python2.5.4Windows7(32位) 简介 长话短说,这里说的扩展Python功能与直接用其它语言写一个动态链接库,然后让Python来调用有点不一样(虽然本质是
1. 认识数据组织格式 图表秀对上传或编辑的数据,主要识别两种格式:列表和交叉表。 列表是一种由数据项构成的有限序列,按横纵向排序而成,最常见的是数据库中存储的表单数据。 交叉表是一种常用的分类汇总表格,是展示统计结果的常见表现形式。 2. 图表秀里哪些图表可以同时支持交叉表和列表? 柱图、条形图、折线图、面积图、散点图、极坐标散点图、圆点图、象形图、3D柱状图、弦图、桑基图、关系图、表格、热力图