在scala中将Spark Dataframe(带有WrappedArray)转换为RDD [labelPoint]

2024-01-03

我是 Scala 新手,我想将 dataframe 转换为 rdd。让标签、特点转换成RDD[labelPoint]用于MLlib的输入。但我找不到处理的方法WrappedArray.

scala> test.printSchema
root
 |-- user_id: long (nullable = true)
 |-- brand_store_sn: string (nullable = true)
 |-- label: integer (nullable = true)
 |-- money_score: double (nullable = true)
 |-- normal_score: double (nullable = true)
 |-- action_score: double (nullable = true)
 |-- features: array (nullable = true)
 |    |-- element: string (containsNull = true)
 |-- flag: string (nullable = true)
 |-- dt: string (nullable = true)


scala> test.head
res21: org.apache.spark.sql.Row = [2533,10005072,1,2.0,1.0,1.0,WrappedArray(["d90_pv_1sec:1.4471580313422192", "d3_pv_1sec:0.9030899869919435", "d7_pv_1sec:0.9030899869919435", "d30_pv_1sec:1.414973347970818", "d90_pv_week_decay:1.4235871662780681", "d1_pv_1sec:0.9030899869919435", "d120_pv_1sec:1.4471580313422192"]),user_positive,20161130]

第一次-自从LabeledPoint期望向量为Doubles,我假设您还想拆分每个中的每个元素features按冒号排列的数组 (:),并将其右侧视为双精度,例如:

 "d90_pv_1sec:1.4471580313422192" --> 1.4471580313422192

如果是这样 - 这是转换:

import org.apache.spark.mllib.linalg.{Vector, Vectors}
import org.apache.spark.mllib.regression.LabeledPoint

// sample data - DataFrame with label, features and other columns
val df = Seq(
  (1, Array("d90_pv_1sec:1.4471580313422192", "d3_pv_1sec:0.9030899869919435"), 4.0),
  (2, Array("d7_pv_1sec:0.9030899869919435", "d30_pv_1sec:1.414973347970818"), 5.0)
).toDF("label", "features", "ignored")

// extract relevant fields from Row and convert WrappedArray[String] into Vector:
val result = df.rdd.map(r => {
  val label = r.getAs[Int]("label")
  val featuresArray = r.getAs[mutable.WrappedArray[String]]("features")
  val features: Vector = Vectors.dense(
    featuresArray.map(_.split(":")(1).toDouble).toArray
  )
  LabeledPoint(label, features)
})

result.foreach(println)
// (1.0,[1.4471580313422192,0.9030899869919435])
// (2.0,[0.9030899869919435,1.414973347970818])

EDIT:根据澄清,现在假设输入数组中的每个项目都包含预期的index在由此产生的sparse vector:

"d90_pv_1sec:1.4471580313422192" --> index = 90; value = 1.4471580313422192

修改后的代码将是:

val vectorSize: Int = 100 // just a guess - should be the maximum index + 1

val result = df.rdd.map(r => {
  val label = r.getAs[Int]("label")
  val arr = r.getAs[mutable.WrappedArray[String]]("features").toArray
  // parse each item into (index, value) tuple to use in sparse vector
  val elements = arr.map(_.split(":")).map {
    case Array(s, d) => (s.replaceAll("d|_pv_1sec","").toInt, d.toDouble)
  }
  LabeledPoint(label, Vectors.sparse(vectorSize, elements))
})

result.foreach(println)
// (1.0,(100,[3,90],[0.9030899869919435,1.4471580313422192]))
// (2.0,(100,[7,30],[0.9030899869919435,1.414973347970818]))

NOTE: Using s.replaceAll("d|_pv_1sec","")可能有点慢,因为它分别为每个项目编译正则表达式。如果是这样的话,它可以被更快(但更丑)的替代s.replace("d", "").replace("_pv_1sec", "")它不使用正则表达式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在scala中将Spark Dataframe(带有WrappedArray)转换为RDD [labelPoint] 的相关文章

  • 在 Scala 中创建任意类作为 monad 实例

    为了使任何东西都可以在 monad 上下文中操作 如果使用 Haskell 我只需在任何地方为给定类型添加类 Monad 的实现 所以我根本不接触数据类型定义的来源 像 人造的东西 data Z a MyZLeft a MyZRight a
  • 如何在R中安装pivot_long()和pivot_wide()

    如果您想尝试这些新功能 pivot wide and pivot long 需要安装开发版tidyr devtools install github tidyverse tidyr 但我还没有实现它 我安装了一系列库 除了一个之外 vctr
  • 导入 sbt 项目时出错,服务器访问错误,未解决的依赖项

    我正在尝试从 IntelliJ IDE 15 0 2 的 build sbt 中导入我的项目中的库 我不断收到未解决的依赖项错误 我尝试更新不同论坛的设置来解决该问题 但没有任何效果 我尝试过的几件事 使用代理设置更新 sbtconfig
  • MongoDB 查询 IN 对象数组

    我在检索两个集合之间的信息时遇到问题 第一个集合存储员工信息 id ObjectId 4f9643967f8b9a3f0a00005a birth date 1963 09 09 departments departments id Obj
  • Swift:在 Core Data 中存储自定义类的数组

    我是核心数据新手 但对于我的一个新项目 我想将我的数据保存到核心数据 我想创建一个 Reptile 类 其中包含几个自定义类数组 如果没有核心数据 我会得到这样的东西 import Foundation import UIKit class
  • awk 每个文件后换行

    使用此脚本 每个字段都会根据当前文件的最长单词打印出来 但需要每个文件都有一个换行符 如何才能实现这一目标 awk BEGIN ORS n FNR NR a i 0 if length 0 gt length max max 0 l len
  • Slick 中的 Scala 枚举(案例对象),良好实践

    假设我有一个代表一组几个有效状态的特征 将对象存储在数据库中是一个好习惯吗 存储 Int 并使用隐式函数 MappedColumnType base Int DoorState 将它们映射到 DoorState 会更好吗 trait Doo
  • 将数组值导出到 csv 文件 java

    我只需要帮助将数组元素导出到 csv 文件 我不知道我的代码有什么问题 任何帮助将不胜感激 谢谢 for int index 0 index lt cols length index FileWriter fw new FileWriter
  • 使用 numpy 加速 for 循环

    下一个 for 循环如何使用 numpy 获得加速 我想这里可以使用一些奇特的索引技巧 但我不知道是哪一个 这里可以使用 einsum 吗 a 0 for i in range len b a numpy mean C d e f b i
  • 一般处理枚举的 Scala 类

    我想创建一个通用类来保存枚举的值 并且还允许访问枚举的可能值 以属性编辑器为例 您需要知道属性的当前值 并且还需要能够知道该属性的其他合法值 并且枚举的类型不应该提前知道 您应该能够使用任何类型的枚举 我的第一个想法是这样的 class E
  • 什么决定了可变类上的 bang 方法是否返回“nil”?

    通常 可变类上的 bang 方法 例如String Array or Hash return nil当没有进行任何修改时 但一些Array爆炸方法 即collect map reverse rotate shuffle sort sort
  • React 重新渲染数组,而 item key 没有改变

    列表的非常基本的代码示例 class List extends React Component render const listComponent this props numbers map number gt
  • 使一个 sbt 配置依赖于另一个配置

    sbt 文档显示了如何仅在项目之间声明依赖关系的示例 但我确信有方法可以声明一个配置依赖于另一个配置 就像测试配置使用编译配置中的类路径一样 如何声明我自己的配置 以便它依赖于编译配置生成的类路径 我更仔细地研究了建议的解决方案 然后又出现
  • 如何垂直打印数组中的字符串元素? [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我有一个数组 我想垂直打印每个元素 例如 myArr abc def ghi 输出应该是 a d g b e h c f
  • 如何更改条形图上的 y 轴限制?

    我有一个df 我从中索引了europe n我绘制了一个条形图 europe n r 5 c 45 looks like this df Country string df Population numeric 变量 plt bar df C
  • Scala案例类使用浅拷贝还是深拷贝?

    case class Person var firstname String lastname String val p1 Person amit shah val p2 p1 copy p1 firstname raghu p1 p2 p
  • numpy 数组最快的保存和加载选项

    我有一个生成二维的脚本numpy数组与dtype float和形状的顺序 1e3 1e6 现在我正在使用np save and np load对数组执行 IO 操作 然而 这些函数对于每个数组都需要几秒钟的时间 是否有更快的方法来保存和加载
  • 多维数组和指向指针的指针

    创建多维数组时char a 10 10 根据我的书 它说你必须使用类似于char a 10 将数组传递给函数 为什么必须这样指定长度 您不是只是将双指针传递给 with 并且该双指针不是已经指向分配的内存吗 那么为什么参数不能是char a
  • python pandas如何在多个条件下过滤字符串

    我有以下数据框 import pandas as pd data 5Star FiveStar five star fiv estar data pd DataFrame data columns columnName 当我尝试用一 种条件
  • Spark DataFrame 不尊重架构并将所有内容视为字符串

    我面临着一个多年来一直无法克服的问题 我使用的是 Spark 1 4 和 Scala 2 10 我现在无法升级 大型分布式基础设施 我有一个包含几百列的文件 其中只有 2 列是字符串 其余都是长列 我想将此数据转换为标签 特征数据框 我已经

随机推荐

  • 使用 Proguard 混淆 ORMLite 模型类

    我想在代码中混淆一些模型 我知道我可以忽略整个模型包 但我不想这样做 我尝试了一些混淆器调整并检查了所有相关帖子 但无济于事 ORMlite 不断抛出java lang RuntimeException Unable to create a
  • Flutter 中何时使用 setState?

    作为 flutter 的新手 使用时对我来说非常困惑setState in Flutter应用 在下面的代码中布尔值searching和变量resBody里面用的setState 我的问题是为什么只searching and resBody
  • Rails update_attribute

    我遇到了以下问题 我有一个名为 用户 的模型 其中有一列名为 已激活 我试图用激活的方法更新该值 但它给了我错误 验证失败 密码不能为空 密码太短 最少为 6 个字符 这对我来说没有意义 因为我没有接触密码字段 我只想更新激活的列 我把代码
  • 正则表达式匹配第一次出现*之后*出现的所有字符?

    例如 如果我尝试匹配输入字符串中的 w 爱德华 伍德沃德 第二个单词中的两个 w 应该匹配 而不是第一个单词中的两个 w 我有一种暗示 该解决方案可能涉及 消极后视 但只是无法获得任何可行的解决方案 我正在使用 Objective C 和正
  • 类型解构

    我的数据类型始终至少有两个参数 最后两个参数始终分别为 q 和 m LANGUAGE TypeFamilies FlexibleContexts UndecidableInstances TypeOperators DataKinds Co
  • R 传单突出显示选项

    我使用以下命令突出显示 R 传单上的一行 library leaflet m leaflet gt addTiles group OpenStreetMap x lt c 1 5 4 8 y lt c 1 3 4 7 data sp Spa
  • 麦克风检测 Actionscript 3

    我在检测是否检测到麦克风时遇到一些问题 我正在运行该函数Microphone getMicrophone 那应该返回null如果没有连接麦克风 或者用户在安全面板上单击了 拒绝 对吗 我面临的问题是 在某些没有安装麦克风的计算机上 Micr
  • 从并行流捕获异常

    我有一堆列作为 csv 文件中的字符串数组 现在我想解析它们 由于此解析需要日期解析和其他不太快的解析技术 因此我正在考虑并行性 我对其进行了计时 这需要一些时间 我的简单方法 Stream of columns parallel forE
  • 自定义相对布局不显示子视图

    我正在尝试创建一个包含两个 imageView 的自定义相对布局 一个图像视图出现在整个屏幕上 另一个图像视图出现在第一个图像视图的左上角 后来我在活动的 xml 文件中使用这个自定义视图 但是 以下代码不会在显示屏上显示任何内容 任何视图
  • AWS Glue:如何在输出中添加包含源文件名的列?

    有谁知道如何将源文件名添加为粘合作业中的列 我们创建了一个流程 在其中抓取 S3 中的一些文件以创建架构 然后 我们编写了一个作业 将文件转换为新格式 并将这些文件以 CSV 形式写回另一个 S3 存储桶 以供管道的其余部分使用 我们想要做
  • Rust:有没有办法使用 map 来缩短 if/else 代码?

    我很难如何使用地图 如下所示 为什么 Rust 需要 if let 语法 https stackoverflow com questions 27534364 why does rust need the if let syntax 有没有
  • 使用页码作为输入从现有 pdf 中剪辑并创建新 pdf - pdfbox

    我有一个 10 页的 pdf 文件 我需要将第 2 页剪切到第 5 页并创建一个新的 pdf 我正在做的事情如下 PDDocument pddDocument PDDocument load new File sample pdf PDFT
  • 冲突的 UNMET 依赖地狱 angular@2 / rxjs zone.js

    我相信我已经事先成功解决了此类问题 或多或少遵循了这个流行问题中概述的方法 https stackoverflow com a 35738361 108350 https stackoverflow com a 35738361 10835
  • 如何使用 KCachegrind 和 Callgrind 只测量部分代码?

    我想用valgrind分析我的代码 问题是 我有一个我不感兴趣的巨大启动序列 我在中找到了定义valgrind callgrind h这应该对我有帮助 CALLGRIND START INSTRUMENTATION CALLGRIND ST
  • 将 TouchDelegate 扩展到视图的父级之外

    我有一个如下所示的布局 我正在尝试扩大绿色视图的可点击区域 我用于此目的的代码是 public static void setTouchDelegate View view float dimen final View parent Vie
  • 如何在没有 Rake 的情况下运行完整的 MiniTest 套件?

    看着这个问题 https stackoverflow com questions 4788288 how to run all the tests with minitest已经 这或多或少反映了我目前运行整个套件的方式 此外 我还设置了以
  • 使用 PHP 在 MySQL 数据库中存储多个复选框数据

    我希望将多个复选框值存储到数据库的一个字段中 例如 1 24 56 100 我想知道如何实现这一点 如果我想在查询中调用变量 PHP 如何从数据库读取这些值 基本上 我正在创建一个博客应用程序 为了乐趣和体验 我希望用户能够通过复选框更改每
  • Reactjs:未捕获类型错误:无法设置 null 属性“innerHTML”

    import React Component from react import ReactDOM from react dom export default class Game extends Component constructor
  • Clojure 中的链式调用?

    我正在尝试在 Clojure 中实现埃拉托斯特尼筛法 我想测试的一种方法是 获取范围 2 3 4 5 6 N For 2 lt i lt N 通过我的范围filter删除乘数i For i 1第 次迭代 使用前一次过滤的结果 我知道我可以做
  • 在scala中将Spark Dataframe(带有WrappedArray)转换为RDD [labelPoint]

    我是 Scala 新手 我想将 dataframe 转换为 rdd 让标签 特点转换成RDD labelPoint 用于MLlib的输入 但我找不到处理的方法WrappedArray scala gt test printSchema ro