Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 火花重新分配到特定资源_Scala_Apache Spark - Fatal编程技术网

Scala 火花重新分配到特定资源

Scala 火花重新分配到特定资源,scala,apache-spark,Scala,Apache Spark,给定一个混合了多种机器类型(例如,带和不带GPU)的火花盘组。我想运行一个Spark管道,其中有些阶段在没有GPU的机器上运行,有些阶段在有GPU的机器上运行 我愿意使用任何集群管理器(纱线、Kubernetes、Mesos等) import org.apache.spark.sql.functions.udf val cpu_only=udf((v:String)=>v) val gpu_only=udf((v:String)=>v) val数据集=Seq((0,“你好”),(1,“世界”).

给定一个混合了多种机器类型(例如,带和不带GPU)的火花盘组。我想运行一个Spark管道,其中有些阶段在没有GPU的机器上运行,有些阶段在有GPU的机器上运行

我愿意使用任何集群管理器(纱线、Kubernetes、Mesos等)

import org.apache.spark.sql.functions.udf
val cpu_only=udf((v:String)=>v)
val gpu_only=udf((v:String)=>v)
val数据集=Seq((0,“你好”),(1,“世界”).toDF(“id”,“text”)
数据集
.withColumn(“从cpu”,仅cpu(“文本))
.withColumn(“from_gpu”,仅限gpu(“from_cpu))
显示
/*概念上需要“重新分区到资源池”(不存在)
数据集
.repartitionToResourcePool(“仅限CPU”)
.withColumn(“从cpu”,仅cpu(“文本))
.repartitionToResourcePool(“仅限GPU”)
.withColumn(“from_gpu”,仅限gpu(“from_cpu))
显示
*/
在上述情况下,仅cpu_的UDF代码应该只在没有GPU的机器上执行,而仅GPU应该只在有GPU的机器上执行


关于如何实现这个场景,有什么建议吗?

我只需要进行一点定制就可以做到这一点

两个基本变化

  • 添加新RDD以允许手动设置preferredLocations
  • 添加将首选位置标记为固定位置的功能。这将防止计划程序使用不在preferredLocations列表中的工作进程
  • 代码在github上可用

    示例用法

    import org.apache.spark.sql.functions.udf
    val cpu_only = udf((v: String) => v)
    val gpu_only = udf((v: String) => v)
    
    val dataset = Seq((0, "hello"), (1, "world")).toDF("id", "text")
    
    import example.extend_spark_api._ // NEW
    
    val cpu = sc.getWorkersFromTag("CPU") // NEW
    val gpu = sc.getWorkersFromTag("GPU") // NEW
    
    dataset
      .repartitionTo(cpu) // NEW
      .withColumn("from_cpu", cpu_only('text))
      .repartitionTo(gpu) // NEW
      .withColumn("from_gpu", gpu_only('from_cpu))
      .show
    

    我能够做到这一点,只是有点定制火花

    两个基本变化

  • 添加新RDD以允许手动设置preferredLocations
  • 添加将首选位置标记为固定位置的功能。这将防止计划程序使用不在preferredLocations列表中的工作进程
  • 代码在github上可用

    示例用法

    import org.apache.spark.sql.functions.udf
    val cpu_only = udf((v: String) => v)
    val gpu_only = udf((v: String) => v)
    
    val dataset = Seq((0, "hello"), (1, "world")).toDF("id", "text")
    
    import example.extend_spark_api._ // NEW
    
    val cpu = sc.getWorkersFromTag("CPU") // NEW
    val gpu = sc.getWorkersFromTag("GPU") // NEW
    
    dataset
      .repartitionTo(cpu) // NEW
      .withColumn("from_cpu", cpu_only('text))
      .repartitionTo(gpu) // NEW
      .withColumn("from_gpu", gpu_only('from_cpu))
      .show
    

    你看过IBM吗?谢谢你!这是一个非常好的链接,接近我正在寻找的内容。我希望有一些开源(或DIY)的东西,可能比gpu和无gpu更通用。你看过IBM吗?谢谢!这是一个非常好的链接,接近我正在寻找的内容。我希望有一些开源(或DIY)的东西,可能比gpu和无gpu更通用