小编Geo*_* L.的帖子

Spark:作业卡在 100 的最后 2 个任务上

我是 Spark 的新手,我必须支持由我们的顾问编写的应用程序。我阅读并观看了大量有关 Spark 的信息,但我仍然在为正确调整工作的小细节而苦苦挣扎。

场景:

  1. 包含 5 条清理规则的 Java 类,我们将这些规则应用于 4 亿条记录的 RDD。
  2. 分区数设置为 1000。
  3. 最后的“操作”是在 S3 上写入,但在此之前我们将分区数量减少到 100。
  4. Spark UI 显示进度,但不幸的是在保存的最后阶段,任务卡在 98/100
  5. 我没有使用 .collect() 但我使用 .map() 和 Spark SQL。

这是我用来编写的代码:

rdd.coalesce(100)
   .write().mode("append")
   .partitionBy("year", "month")
   .format(SPARK_AVRO_PACKAGE)
   .save(appProps.getProperty(PAGEVIEW_CLEANSED));
Run Code Online (Sandbox Code Playgroud)

我不确定是否应该努力改进代码或调整 spark/cluster 的性能。

更新:我认为这段代码是我遇到的问题的原因。我在 SO 上找到了一个类似的帖子(Spark 不会将负载平均分配给任务),我只是不确定如何在我的情况下使用广播。

Dataset<Row> duplicatePrefetchPrerenderHashDS = 
            hashedPageViewDS
              .select(hashedPageViewDS.col(PREFETCH_PRERENDER_HASH))
              .groupBy(hashedPageViewDS.col(PREFETCH_PRERENDER_HASH))
              .count()
              .withColumnRenamed("count", "cnt")
              .where("cnt>1");
Run Code Online (Sandbox Code Playgroud)

bigdata apache-spark

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

如何使用Mockito来JUNIT java.util.Function

我想在toEntity函数上使用Mockito 执行junit测试。

    @Component
    public class MyEntityTransform {
        public Function<MyDTO , MyEntity> toEntity = new Function<MyDTO , MyEntity >() {
            @Override
            public MyEntity apply(MyDTO record) {
                return new MyEntity();
            }
        };  
    }
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我模拟该类时,toEntityNULL,我不知道如何正确测试它。

@RunWith(MockitoJUnitRunner.class)
public class MyTest {

    @InjectMocks
    private MyService _classUnderTest;

    @Mock
    private MyEntityTransform  myEntityTransform 

    @Before
    public void setUp() {
      Mockito.when(this.myEntityTransform.toEntity.apply(Mockito.anyObject())).thenReturn(...);
    }   
}
Run Code Online (Sandbox Code Playgroud)

当我运行JUNIT测试时,Mockito给我错误:

java.lang.NullPointerException org.mockito.exceptions.misusing.InvalidUseOfMatchersException:在此处检测到错误的参数匹配器:

-> com.example.MyTest.setUp(MyTest.java:38)

您不能在验证或存根之外使用参数匹配器。正确使用参数匹配器的示例:when(mock.get(anyInt()))。thenReturn(null); doThrow(new RuntimeException())。when(mock).someVoidMethod(anyObject()); verify(mock).someMethod(contains(“ foo”))

另外,可能会出现此错误,因为您将参数匹配器与无法模拟的方法一起使用。以下方法不能存根/验证:final / private / equals()/ hashCode()。不支持在非公共父类上声明的模拟方法。

有什么建议吗?

java junit mockito

0
推荐指数
1
解决办法
2940
查看次数

标签 统计

apache-spark ×1

bigdata ×1

java ×1

junit ×1

mockito ×1