我知道您可以使用 yaml 锚点在 before 脚本中重用代码块:
.something_before: &something_before
- echo 'something before'
before_script:
- *something_before
- echo "Another script step"
Run Code Online (Sandbox Code Playgroud)
.yml但是当 .something_before通过.something_before 在共享文件中声明时,这似乎不起作用include:file。它似乎也不extends适用于before_script. 有谁知道如何重用before_script共享.yml文件中的某些步骤?
编辑:我的用例是我有 2 个 gitlab 项目,它们的 before_script 步骤几乎相同。我不想在发生更改时都必须更改这两个项目,因此我有第三个单独的 Gitlab 项目,其中包含一个 .yml 模板,我通过 include:file 将其包含在两个项目中。我想将所有通用代码放入该共享模板中,并且对于具有两个额外步骤的 git 项目,只有两行 before_script 。
我有一堂课
class MyClass {
def apply(myRDD: RDD[String]) {
val rdd2 = myRDD.map(myString => {
// do String manipulation
}
}
Run Code Online (Sandbox Code Playgroud)
}
object MyClass {
}
Run Code Online (Sandbox Code Playgroud)
由于我有一段代码执行一个任务(表示的区域"do String manipulation"),因此我认为应该将其分解为自己的方法。由于该方法不会更改类的状态,因此我认为应该将其设置为static方法。
我怎么做?
我认为您可以在同伴对象内弹出一个方法,它将作为静态类提供,如下所示:
object MyClass {
def doStringManipulation(myString: String) = {
// do String manipulation
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试时val rdd2 = myRDD.map(myString => { doStringManipulation(myString)}),scala无法识别该方法,因此它迫使我执行此操作MyClass.doStringManipulation(myString)以进行调用。
我究竟做错了什么?
我在EMR上运行我的Spark应用程序,并且有几个println()语句。除了控制台以外,这些语句在哪里记录?
我的集群的S3 aws-logs目录结构如下:
node
??? i-0031cd7a536a42g1e
? ??? applications
? ??? bootstrap-actions
? ??? daemons
? ??? provision-node
? ??? setup-devices
containers/
??? application_12341331455631_0001
? ??? container_12341331455631_0001_01_000001
我有一个非常大的 RDD 正在缓存(它仍然适合内存),但由于它太大,我想尽快取消它。但是,当我调用 unpersist 时,它会导致 RPC 超时错误:
17/11/21 23:25:55 INFO BlockManager: Removing RDD 171
Exception in thread "main" org.apache.spark.rpc.RpcTimeoutException: Futures timed out after [120 seconds]. This timeout is controlled by spark.rpc.askTimeout
at org.apache.spark.rpc.RpcTimeout.org$apache$spark$rpc$RpcTimeout$$createRpcTimeoutException(RpcTimeout.scala:47)
at org.apache.spark.rpc.RpcTimeout$$anonfun$addMessageIfTimeout$1.applyOrElse(RpcTimeout.scala:62)
at org.apache.spark.rpc.RpcTimeout$$anonfun$addMessageIfTimeout$1.applyOrElse(RpcTimeout.scala:58)
at scala.runtime.AbstractPartialFunction.apply(AbstractPartialFunction.scala:36)
at org.apache.spark.rpc.RpcTimeout.awaitResult(RpcTimeout.scala:76)
at org.apache.spark.storage.BlockManagerMaster.removeRdd(BlockManagerMaster.scala:135)
at org.apache.spark.SparkContext.unpersistRDD(SparkContext.scala:1793)
at org.apache.spark.rdd.RDD.unpersist(RDD.scala:216)
17/11/21 23:27:55 WARN BlockManagerMaster: Failed to remove RDD 171 - Cannot receive any reply from null in 120 seconds. This timeout is controlled by spark.rpc.askTimeout
org.apache.spark.rpc.RpcTimeoutException: Cannot receive any reply from null in …Run Code Online (Sandbox Code Playgroud) 我有一个 Spark(scala)数据框,其中一些数据框列是可选的,也就是说,有时它们不存在。有没有一种非常简单的方法来修改我的df.select语句,以便 Spark 不关心该列可能不存在?
例如,现在我有:df.select(Seq(col("col1"), col("optionalCol"), col("col2")))。
我希望会有某种“可选”名称。
如果我有一个空的 RDD,我希望我的 Spark 应用程序能够优雅地结束。在 Scala 中执行此操作的最佳方法是什么?
当我刚使用时:
if (myRDD.isEmpty) { sparkSession.stop() }
Spark 应用程序尝试继续并抛出一个IllegalStageException.
我需要System.exit(0)事后吗?我应该在return后面加一个吗?
我有一个带有以下声明的 Scala 案例类:
case class Student(name: String, firstCourse: String, secondCourse: String, thirdCourse: String, fourthCourse: String, fifthCourse: String, sixthCourse: String, seventhCourse: String, eighthCourse: String)
Run Code Online (Sandbox Code Playgroud)
在我创建一个新Student对象之前,我有一个保存值的变量name和一个保存所有 8 门课程值的数组。有没有办法将此数组传递给Student构造函数?我希望它看起来比:
val firstStudent = Student(name, courses(0), courses(1), courses(2), courses(3), courses(4), courses(5), courses(6), courses(7))
Run Code Online (Sandbox Code Playgroud) scala ×5
apache-spark ×4
amazon-emr ×1
amazon-s3 ×1
coding-style ×1
dataframe ×1
emr ×1
gitlab ×1
gitlab-ci ×1
static ×1