当前位置: 首页 > 知识库问答 >
问题:

RDD到标签点的转换

楚帅
2023-03-14

如果我有一个大约有500列和2亿行的RDD,以及RDD。柱。indexOf(“target”,0)显示Int=77,它告诉我目标因变量位于第77列。但我没有足够的知识来选择所需的(部分)列作为特征(比如我想要23到59、111到357、399到489的列)。我想知道我是否可以申请:

val data = rdd.map(col => new LabeledPoint(
    col(77).toDouble, Vectors.dense(??.map(x => x.toDouble).toArray))

如有任何建议或指导,将不胜感激。

也许我用DataFrame搞砸了RDD,我可以用. toDF()将RDD转换为DataFrame,或者用DataFrame比RDD更容易实现目标。

共有1个答案

冀越
2023-03-14

我假设您的数据大致如下:

import scala.util.Random.{setSeed, nextDouble}
setSeed(1)

case class Record(
    foo: Double, target: Double, x1: Double, x2: Double, x3: Double)

val rows = sc.parallelize(
    (1 to 10).map(_ => Record(
        nextDouble, nextDouble, nextDouble, nextDouble, nextDouble
   ))
)
val df = sqlContext.createDataFrame(rows)
df.registerTempTable("df")

sqlContext.sql("""
  SELECT ROUND(foo, 2) foo,
         ROUND(target, 2) target,
         ROUND(x1, 2) x1,
         ROUND(x2, 2) x2,
         ROUND(x2, 2) x3 
  FROM df""").show

所以我们有如下数据:

+----+------+----+----+----+
| foo|target|  x1|  x2|  x3|
+----+------+----+----+----+
|0.73|  0.41|0.21|0.33|0.33|
|0.01|  0.96|0.94|0.95|0.95|
| 0.4|  0.35|0.29|0.51|0.51|
|0.77|  0.66|0.16|0.38|0.38|
|0.69|  0.81|0.01|0.52|0.52|
|0.14|  0.48|0.54|0.58|0.58|
|0.62|  0.18|0.01|0.16|0.16|
|0.54|  0.97|0.25|0.39|0.39|
|0.43|  0.23|0.89|0.04|0.04|
|0.66|  0.12|0.65|0.98|0.98|
+----+------+----+----+----+

我们要忽略foox2并提取LabeledPoint(目标,Array(x1, x3))

// Map feature names to indices
val featInd = List("x1", "x3").map(df.columns.indexOf(_))

// Or if you want to exclude columns
val ignored = List("foo", "target", "x2")
val featInd = df.columns.diff(ignored).map(df.columns.indexOf(_))

// Get index of target
val targetInd = df.columns.indexOf("target") 

df.rdd.map(r => LabeledPoint(
   r.getDouble(targetInd), // Get target value
   // Map feature indices to values
   Vectors.dense(featInd.map(r.getDouble(_)).toArray) 
))
 类似资料:
  • 我正在尝试使用火花 MLlib 实现一个简单的 SVM 分类算法。 我有一堆字符串和它们的标签,现在我想对它们执行TF-IDF,并将结果反馈给SVM算法。 所以我要找的是从字符串的转换- 我按照这个例子:http://spark . Apache . org/docs/latest/ml lib-feature-extraction . html # TF-IDF 还有这个https://gith

  • In HTML, allows you to quickly traverse between opening and closing tag: 在HTML标签的开始与关闭标记间跳转。 <div id="page"> <section class="content"> <h1>Document example</h1> <p>Lorem ipsum dolo

  • 问题内容: 我想 在Databricks中将转换为。 有人可以帮忙吗? 背景 (也欢迎一个更好的解决方案):我有一个Kafka流,经过一些步骤后,该流变成了2列数据帧。我想将其放入Redis缓存中,第一列作为键,第二列作为值。 更具体地说 ,输入的类型是:。我尝试放入Redis,如下所示: 错误消息如下所示: 我已经玩过一些想法(例如function ),但是没有一个帮助。 问题答案: 如果要将行

  • 我对Spark和Scala相对较新。 我从以下数据帧开始(由密集的双倍向量组成的单列): 直接转换为RDD将生成一个org实例。阿帕奇。火花rdd。RDD[org.apache.spark.sql.Row]: 有人知道如何将此DF转换为org.apache.spark.rdd.RDD[org.apache.spark.mllib.linalg.向量]的实例吗?到目前为止,我的各种尝试都没有成功。

  • 问题内容: 我一直在使用此d3项目中的示例代码来学习如何显示d3图形,但似乎无法使文本显示在圆圈的中间)。我看过其他示例并尝试添加 和 在定义了节点之后,但是当我将鼠标悬停在每个节点上时,我看到的唯一结果是显示“要显示的节点名称”。它没有显示为圆圈内的文本。我是否需要编写自己的svg文本对象,并根据圆的半径确定需要放置的svg文本对象的坐标?从其他两个示例来看,似乎d3已经以某种方式进行了处理。我

  • 主要内容:转换器标签JSF有转换器将其UI组件的数据转换为托管bean中使用的对象,反之亦然。 例如,我们可以将文本转换为日期对象,并且可以验证输入的格式。 要使用转换器标签,我们必须在节点中使用URI的以下命名空间。 转换器标签 以下是JSF 2.0中的重要转换代码: 标签 描述 将字符串转换为所需格式的数字值 将字符串转换为所需的日期格式 自定义转换器 创建一个自定义转换器