在 RDD 中使用集群映射



我一直在尝试在 SPARK 中执行以下语句,并将 master 作为 YARN 集群,但它没有任何结果。而如果我在本地执行相同的操作,它的运行没有任何问题。有人可以建议这里有什么问题吗?

在此过程中,输入是包含 AVRO 文件的 HDFS 目录

val rdd = sc.newAPIHadoopFile(inAvro,
classOf[AvroKeyInputFormat[PolicyTransaction]],
classOf[AvroKey[PolicyTransaction]],
classOf[NullWritable],
sc.hadoopConfiguration
)
println(rdd.count())// This works with Local and Cluster
val avroObj = rdd.map(record => {
Try
{
val combineRecords = new PolicyTransaction
println(record._1.datum().getPolicyNumber)// This doesn't work with Local and Cluster
combineRecords.setPolicyNumber(record._1.datum().getPolicyNumber)
combineRecords.setLOBCd(record._1.datum().getLOBCd)
combineRecords.setPolicyVersion(record._1.datum().getPolicyVersion)
combineRecords.setStatStateProvCd(record._1.datum().getStatStateProvCd)
combineRecords.setTransactionEffectiveDt(record._1.datum().getTransactionEffectiveDt)
combineRecords.setTransactionProcessedDt(record._1.datum().getTransactionProcessedDt)
combineRecords.setQuoteOrPolicy(record._1.datum().getQuoteOrPolicy.get(0))
combineRecords
}
match
{
case Success(map) => Right(map)
case Failure(map) => Left(map)
}
}
).cache()

因此,正如我在评论中所说 - 我假设您指的是未打印的打印语句,如果是这样,那么您犯了一个经典错误,忘记了println命令是在您的工人上执行的 -而不是在您的驱动程序上 - 因此您不会看到它打印在您的驱动程序上。浏览一下工人的日志文件,你会看到你的打印语句;-)

我认为你找错地方了!println 将打印到本地输出。因此,由于第一次打印是在驱动程序上运行的,因此您可能会在启动的控制台上看到它。但是,在映射中,这不是真的,代码正在集群上的某个位置运行。您需要检查本地日志。

或者,停止使用 println,改用记录器。这会将所有内容记录到共享日志环境中。在群集模式下,您仍然不会看到这一点,但至少所有内容都将在某个地方集中整理,从而节省您找出代码运行位置的工作。

相关内容

  • 没有找到相关文章

最新更新