Scala 我们是否应该在训练之前并行化一个数据帧,就像并行化一个Seq一样
考虑一下这里给出的代码 假设我们使用sqlContext.read()将“training”作为数据帧读取,则应该 我们仍然在做类似的事情Scala 我们是否应该在训练之前并行化一个数据帧,就像并行化一个Seq一样,scala,apache-spark,pyspark,apache-spark-sql,apache-spark-ml,Scala,Apache Spark,Pyspark,Apache Spark Sql,Apache Spark Ml,考虑一下这里给出的代码 假设我们使用sqlContext.read()将“training”作为数据帧读取,则应该 我们仍然在做类似的事情 val model1 = lr.fit(sparkContext.parallelize(training)) // or some variation of this 或者,当传递数据帧时,fit函数将自动处理计算/数据的并行化 在这方面,数据帧是一种分布式数据结构。既不需要也不可能将其并行化SparkConext.parallelize方法仅用于驻留
val model1 = lr.fit(sparkContext.parallelize(training)) // or some variation of this
或者,当传递数据帧时,fit函数将自动处理计算/数据的并行化
在这方面,数据帧是一种分布式数据结构。既不需要也不可能将其并行化
SparkConext.parallelize
方法仅用于驻留在驱动程序内存中的分布式本地数据结构。您不应该习惯于分发大型数据集,更不用说重新分发rdd
或更高级别的数据结构(就像您在前面的问题中所做的那样)
如果要在RDD
/Dataframe
(Dataset
)之间进行转换,请使用专门为此设计的方法:
DataFrame
到RDD
:
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
RDD
到DataFrame
:
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
您可能应该检查RDD和DataFrame之间的差异,以及如何在两者之间进行转换: 直接回答您的问题:数据帧已经针对并行执行进行了优化。您不需要做任何事情,可以直接将其传递给任何spark estimators fit()方法。并行执行在后台处理
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