我是 Spark 的新手,我必须支持由我们的顾问编写的应用程序。我阅读并观看了大量有关 Spark 的信息,但我仍然在为正确调整工作的小细节而苦苦挣扎。
场景:
这是我用来编写的代码:
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) 我想在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)
不幸的是,当我模拟该类时,toEntity为NULL,我不知道如何正确测试它。
@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()。不支持在非公共父类上声明的模拟方法。
有什么建议吗?