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

我们是否应该像在训练前并行化Seq一样并行化数据frame

吴德辉
2023-03-14

考虑一下这里给出的代码,

https://spark.apache.org/docs/1.2.0/ml-guide.html

import org.apache.spark.ml.classification.LogisticRegression
val training = sparkContext.parallelize(Seq(
  LabeledPoint(1.0, Vectors.dense(0.0, 1.1, 0.1)),
  LabeledPoint(0.0, Vectors.dense(2.0, 1.0, -1.0)),
  LabeledPoint(0.0, Vectors.dense(2.0, 1.3, 1.0)),
  LabeledPoint(1.0, Vectors.dense(0.0, 1.2, -0.5))))

val lr = new LogisticRegression()
lr.setMaxIter(10).setRegParam(0.01)

val model1 = lr.fit(training)

假设我们使用sqlcontext.read()将“training”读取为dataframe,那么我们是否还应该执行以下操作

val model1 = lr.fit(sparkContext.parallelize(training)) // or some variation of this

共有1个答案

杨飞飙
2023-03-14

DataFrame是一种分布式数据结构。并行化既不需要也不可能。sparkconext.parallelize方法仅用于驻留在驱动程序内存中的分布式本地数据结构。您不应该习惯于分发大型数据集,更不用说重新分发RDDS或更高级别的数据结构了(就像您在上一个问题中所做的那样)

sc.parallelize(trainingData.collect()) 

如果要在rdd/dataframe(dataset)之间进行转换,请使用为此目的设计的方法:

>

  • dataframerdd:

    import org.apache.spark.sql.DataFrame
    import org.apache.spark.sql.Row
    import org.apache.spark.rdd.RDD
    
    val df: DataFrame  = Seq(("foo", 1), ("bar", 2)).toDF("k", "v")
    val rdd: RDD[Row] = df.rdd
    
    val rdd: RDD[(String, Int)] = sc.parallelize(Seq(("foo", 1), ("bar", 2)))
    val df1: DataFrame = rdd.toDF
    // or
    val df2: DataFrame = spark.createDataFrame(rdd) // From 1.x use sqlContext
    

  •  类似资料:
    • 我试图为时间序列分析构建一个简单的神经网络。到目前为止,我只添加了致密层(但如果您喜欢,欢迎对LSTM等进行评论)。 我的输入是通常的格式{样本,时间步,特征},比如说{1000,100,3},我想要一个单步输出。到目前为止,我无法理解是否应该将数据展平,以及在哪里。 如果我不展平,如果我在最后一层之前展平,如果我在第一层之前展平,结果就会改变。但我还没有办法判断其中是否有一个是正确的。 在这个问

    • 我有一个Spark2.1工作,在这里我维护多个数据集对象/RDD,它们代表我们底层Hive/HDFS数据存储上的不同查询。我注意到,如果我简单地迭代数据集列表,它们一次执行一个。每个单独的查询都是并行操作的,但是我觉得我们没有通过并行运行不同的数据集来最大化我们的资源。

    • 假设我有一个具有以下类型的 RDD: 我可以假设整个列表位于同一个工人吗?我想知道某些操作在RDD层面上是否可以接受,还是应该在车手层面计算。例如: 请注意,可能是或任何其他操作的结果,不一定是作为一个整体创建的。 问题是< code>List是分布式的,计算< code>maxItem可能会导致大量网络流量。这可以用以下类型的RDD来处理: 其中,最大项目是在驱动程序中计算的。 所以问题(实际上

    • 问题内容: 我在观看NodeJS Interactive谈话时,那个家伙在说匿名函数的性能很差,原因之一是,如果它们没有名称,VM便无法根据使用频率来优化该函数,因为它没有名字。 因此,如果一个具有名称的函数被调用 可以优化为以下功能: 由于它是匿名的,无名的,因此不会进行优化。 所以我想知道箭头函数是否会做同样的事情,因为我认为您不能命名箭头函数。 将 被优化? 编辑:寻找该人提及此话题的谈话链

    • 我有一个包含Conv2D层的网络,然后是ReLU激活,声明如下: 它被移植到TFLite,具有以下代表性: 无Q感知训练的基本TFLite网络 然而,在网络上执行量化感知训练并再次移植后,ReLU层现在在图中是明确的: TFLite网络在Q感知训练后 这导致它们在目标上被单独处理,而不是在Conv2D内核的评估期间,在我的整个网络中导致10%的性能损失。 使用以下隐式语法声明激活不会产生问题: 具

    • 问题内容: 您对将尝试获取代码并将其自动拆分为线程的项目有何看法(可能是编译时,可能是在运行时)。 看下面的代码: 这种代码可以自动拆分为两个并行运行的线程。您是否认为有可能?从理论上讲,我感觉这是不可能的(这使我想起了停顿的问题),但是我不能证明这种想法是正确的。 您认为这是一个有用的项目吗?有没有类似的东西? 问题答案: 在一般情况下是否可以知道一段代码是否可以并行化并不重要,因为即使您的算法