关于学习Spark的记录

2021年第一更,在实验室呆了一个学期,写这一篇主要是想把一些容易的忘记的做过的关于Spark的记录下来。下面有两篇之前mark下来的点。

是关于一些spark读写问题和bug的。

Note_1

Note_2


  1. 关于读取某些列或行的方法。数据格式如图。
    Channel,Region,Fresh,Milk,Grocery,Frozen,Detergents_Paper,Delicassen
    2,3,12669,9656,7561,214,2674,1338
    2,3,7057,9810,9568,1762,3293,1776
    2,3,6353,8808,7684,2405,3516,7844
    1,3,13265,1196,4221,6404,507,1788
    2,3,22615,5410,7198,3915,1777,5185
    2,3,9413,8259,5126,666,1795,1451
    2,3,12126,3199,6975,480,3140,545
    2,3,7579,4956,9426,1669,3321,2566
    1,3,5963,3648,6192,425,1716,750
    2,3,6006,11093,18881,1159,7425,2098
    2,3,3366,5403,12974,4400,5977,1744
    2,3,13146,1124,4523,1420,549,497
    2,3,31714,12319,11757,287,3881,2931
    2,3,21217,6208,14982,3095,6707,602
    2,3,24653,9465,12091,294,5058,2168
    
    

    第一,消除第一行的方法,有两种。

    val rdd = spark.sparkContext.textFile(path)
    val header = rdd.first()
    val csv2 = rdd.filter(_ != header)

    读进来之后用filter进行过滤,条件为真的留下了,其他剔除掉。

    val rdd = spark.sparkContext.textFile(path)
    val csv2 = rdd.zipWithIndex().filter(_._2>=1).keys//_2的意思是第2个位置的,也就是下标所在的位置,_1\_0 都会报错

    使用zipWithIndex算子,该函数将RDD中的元素和这个元素在RDD中的ID(索引号)组合成键/值对。因为textfile读进来是每一行为一个rdd,这里的1(从0开始)是代表第二行之后。

    val csv10 = csv1.map(x=>(for(i <- 2 until 7 ) yield x(i)).toArray).collect()//把1,2列剔除掉了。

    而第二,消除列的方法就是如上述所示。用yield获取除了第一第二列的元素转成一个数组。

  2. 关于RDD中的 ClassTag中的常见的T、U 是什么意思?     其实这可以看作是一种隐式,范型,表示之后在函数中出现的类U是ClassTag的一个子类,比如,你传入的是f函数返回的类型是U 比如设想 U为String ,这是你前面的ClassTag就为String类型,然后传给编译器。

  3. Spark中常见的withScope方法到底是个什么东西?     其实,withScope是一个函数,withScope的实现是RDDOperationScope.withScope[U](sc)(body)。RDDOperationScope.withScopeU(body)的中就是用到了柯里化的技术,他的作用就是把公共部分(函数体)抽出来封装成方法(这里的公共部分我的理解就是sc,也就是sparkCont), 把非公共部分通过函数值传进来(这里就是body的内容了),为什么要这么做呢:withScope是最近的发现版中新增加的一个模块,它是用来做DAG可视化的(DAG visualization on SparkUI)以前的sparkUI中只有stage的执行情况,也就是说我们不可以看到上个RDD到下个RDD的具体信息。于是为了在sparkUI中能展示更多的信息。所以把所有创建的RDD的方法都包裹起来,同时用RDDOperationScope 记录 RDD 的操作历史和关联,就能达成目标。其中 parent 可以用来追溯到所有 RDD 操作信息,即 RDDOperationScope。(有参考网上资料)

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值