机器配置:
问题:
案例场景:
Spark模式:本地
数据库:使用Cassandra 2.1.12
我正在将3个表提取到数据帧中,这些数据帧少于10行。是的,不到10(十)。 将其提取到数据帧后,我多次执行连接,计数,显示和收集操作。当我执行我的程序时,Spark正在创建40404个作业4次。它表示计数需要执行这些工作。我在节目中使用4-5次计数。等待超过18分钟(约18.5至20)后,它给出了预期的输出。
提前致谢。
示例代码1:
holder.scrollContainer.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int scroll1st = 0;
int scroll2nd = 0;
if(event.getAction() == MotionEvent.ACTION_DOWN){
scroll1st = holder.scrollContainer.getScrollX();
Log.d("SCROLL", "Scroll down callded: amt is: " + holder.scrollContainer.getScrollX() );
mDataSet.get(position).isFirstSwipe = false;
} else if (event.getAction() == MotionEvent.ACTION_UP){
scroll2nd = holder.scrollContainer.getScrollX();
Log.d("SCROLL", "Scroll up callded: amt is: " + holder.scrollContainer.getScrollX() );
}
Log.d("SCROLL", "max scroll amount: " + holder.scrollContainer.getMaxScrollAmount());
if(event.getAction() == MotionEvent.ACTION_UP){
if(scroll2nd > scroll1st && (scroll2nd - scroll1st ) > 50 ){
holder.scrollContainer.postDelayed(new Runnable() {
public void run() {
holder.scrollContainer.fullScroll(HorizontalScrollView.FOCUS_RIGHT);
}
}, 100L);
mDataSet.get(position).isFirstSwipe = true;
} else if (scroll1st > scroll2nd && (scroll1st - scroll2nd ) > 50){
holder.scrollContainer.postDelayed(new Runnable() {
public void run() {
holder.scrollContainer.fullScroll(HorizontalScrollView.FOCUS_LEFT);
}
}, 100L);
mDataSet.get(position).isFirstSwipe = true;
}
}
v.onTouchEvent(event);
return true;
}
});
示例代码2:
def getGroups(id: Array[String], level: Int): DataFrame = {
var lvl = level
if (level >= 0) {
for (iterated_id <- id) {
val single_level_group = supportive_df.filter("id = '" + iterated_id + "' and level = " + level).select("family_id")
//single_level_group.show()
intermediate_df = intermediate_df.unionAll(single_level_group)
//println("for loop portion...")
}
final_df = final_df.unionAll(intermediate_df)
lvl -= 1
val user_id_param = intermediate_df.collect().map { row => row.getString(0) }
intermediate_df = empty_df
//println("new method...if portion...")
getGroups(user_id_param, lvl)
} else {
//println("new method...")
final_df.distinct()
}
}
这两个是我的编程中的主要代码块,执行时间过长。它通常需要很长时间才能显示或计数操作。
答案 0 :(得分:1)
好的,让我们记住一些基础知识!
Spark 是 lazy ,show
和count
是操作。
一个动作会触发你需要加载的转换。如果你正在汇集来自Cassandra(或任何其他来源)的数据,这会花费很多,因为你似乎没有缓解你的转变!
因此,在DataFrame或RDD上进行密集计算时需要考虑缓存,这将使您的操作更快地执行!
关于你有多少任务(作业)的原因当然是通过spark并行机制来解释你执行动作的次数是你正在执行的转换/动作的次数,而不是提到循环!
尽管如此,仍然根据所提供的信息和问题中的代码片段的质量,这就是我的回答。
我希望这有帮助!
答案 1 :(得分:1)
distinct()
,因此在使用distinct()
时,您必须查看有多少分区在不同之后。我认为这就是为什么火花创造了数千个工作岗位的原因。coalesce()
之后使用distinct()
的原因。