相关疑难解决方法(0)

如何将RDD拆分为两个或更多RDD?

我正在寻找一种方法将RDD分成两个或更多RDD.我见过的最接近的是Scala Spark:拆分收集到几个RDD?这仍然是一个RDD.

如果您熟悉SAS,请执行以下操作:

data work.split1, work.split2;
    set work.preSplit;

    if (condition1)
        output work.split1
    else if (condition2)
        output work.split2
run;
Run Code Online (Sandbox Code Playgroud)

这导致了两个不同的数据集.它必须立即坚持以获得我打算的结果......

apache-spark rdd pyspark

35
推荐指数
2
解决办法
4万
查看次数

SPARK DataFrame:如何基于相同的列值为每个组有效地拆分数据框

我有一个生成的DataFrame,如下所示:

df.groupBy($"Hour", $"Category")
  .agg(sum($"value").alias("TotalValue"))
  .sort($"Hour".asc,$"TotalValue".desc))
Run Code Online (Sandbox Code Playgroud)

结果如下:

+----+--------+----------+
|Hour|Category|TotalValue|
+----+--------+----------+
|   0|   cat26|      30.9|
|   0|   cat13|      22.1|
|   0|   cat95|      19.6|
|   0|  cat105|       1.3|
|   1|   cat67|      28.5|
|   1|    cat4|      26.8|
|   1|   cat13|      12.6|
|   1|   cat23|       5.3|
|   2|   cat56|      39.6|
|   2|   cat40|      29.7|
|   2|  cat187|      27.9|
|   2|   cat68|       9.8|
|   3|    cat8|      35.6|
| ...|    ....|      ....|
+----+--------+----------+
Run Code Online (Sandbox Code Playgroud)

我想根据每个独特的价值作出新的dataframes col("Hour"),即

  • 对于小时== 0的组
  • 对于小时== 1的组
  • 对于小时== 2的组,依此类推...

因此,所需的输出将是:

df0 as:

+----+--------+----------+
|Hour|Category|TotalValue| …
Run Code Online (Sandbox Code Playgroud)

scala apache-spark parquet apache-spark-sql spark-dataframe

8
推荐指数
1
解决办法
2万
查看次数

使用Spark MLlib Scala API按组运行3000+随机森林模型

我正在尝试使用Spark Scala API在大型模型输入csv文件上按组(School_ID,超过3,000)构建随机森林模型.每组包含约3000-4000条记录.我拥有的资源是20-30 aws m3.2xlarge实例.

在R中,我可以按组构建模型并将它们保存到这样的列表中 -

library(dplyr);library(randomForest);
    Rf_model <- train %>% group_by(School_ID) %>% 
                do(school= randomForest(formula=Rf_formula, data=., importance = TRUE))
Run Code Online (Sandbox Code Playgroud)

列表可以存储在某个地方,我可以在需要使用它们时调用它们,如下所示 -

save(Rf_model.school,file=paste0(Modelpath,"Rf_model.dat"))
load(file=paste0(Modelpath,"Rf_model.dat"))
pred <-  predict(Rf_model.school$school[school_index][[1]], newdata=test)
Run Code Online (Sandbox Code Playgroud)

我想知道如何在Spark中做到这一点,无论我是否需要首先按组分割数据以及如何在必要时有效地进行分割.

我能够根据以下代码通过School_ID拆分文件,但似乎它为每次迭代创建了一个单独的作业子集,并且需要很长时间才能完成作业.有没有办法一次性完成?

model_input.cache()

val schools = model_input.select("School_ID").distinct.collect.flatMap(_.toSeq)
val bySchoolArray = schools.map(School_ID => model_input.where($"School_ID" <=> School_ID))

for( i <- 0 to programs.length - 1 ){
  bySchoolArray(i).
    write.format("com.databricks.spark.csv").
    option("header", "true").
    save("model_input_bySchool/model_input_"+ schools(i))
}
Run Code Online (Sandbox Code Playgroud)

来源: 如何在SCALA和SPARK中将数据框拆分为具有相同列值的数据框

编辑8/24/2015 我正在尝试将我的数据帧转换为随机林模型接受的格式.我正在遵循此线程上的说明 如何在Spark ML中创建用于分类的正确数据帧

基本上,我创建了一个新变量"label"并将我的类存储在Double中.然后我使用VectorAssembler函数组合我的所有功能,并将我的输入数据转换如下 -

val assembler = new VectorAssembler().
  setInputCols(Array("COL1", "COL2", "COL3")).
  setOutputCol("features")

val model_input = assembler.transform(model_input_raw). …
Run Code Online (Sandbox Code Playgroud)

scala r apache-spark apache-spark-mllib

6
推荐指数
1
解决办法
1920
查看次数

PySpark:不使用循环将 DataFrame 拆分为多个 DataFrame

嗨,我有一个如图所示的 DataFrame -

ID       X        Y

1      1234      284

1      1396      179

2      8620      178

3      1620      191

3      8820      828
Run Code Online (Sandbox Code Playgroud)

我想根据 ID 将此 DataFrame 拆分为多个 DataFrame。因此,对于此示例,将有 3 个 DataFrame。实现它的一种方法是在循环中运行过滤器操作。但是,我想知道是否可以以更有效的方式完成。

python apache-spark pyspark spark-dataframe

3
推荐指数
2
解决办法
1万
查看次数