写作业时遇到的一些小知识点

  • void*类型可以存储任何类型的指针,使用的时候强制转化成对应类型的指针便可。如:星(int星)a,意思是:把变量 a强制转换为int星型的指针变量,然后取其值。

  • 库函数 int sprintf(char *str, const char *format, ...)发送格式化输出到 str 所指向的字符串。int sprintf(char *str, const char *format, ...)

  • int8_t / int16_t / int32_t /int64_t 是什么数据类型?就是为了适应跨平台,规定了int的字节数

  • linux下source的作用:(https://www.cnblogs.com/general001/articles/2420089.html)

    • 是 bash shell 的内置命令,从 C Shell 而来。
    • 另一种写法是点符号(.),用法和 source 相同,从Bourne Shell而来。
    • 此命令可以强行让一个脚本去立即影响当前的环境强制执行脚本中的全部命令,而忽略文件的权限。通常用于重新执行刚修改的初始化文件,如 .bash_profile 和 .profile 等等。可以影响执行脚本的父shell的环境,而 export 则只能影响其子shell的环境。
    • 用法举例:$source ~/.bashrc 或者 $. ~/.bashrc
  • #ifndef STH #define STH #endif

    • 作用:防止头文件的重复包含和编译
    • 这是宏定义的一种,一般用于调试等等.实际上确切的说这应该是预处理功能中三种(宏定义,文件包含和条件编译)中的一种----条件编译
    • https://blog.csdn.net/u012677715/article/details/80685170
  • extern:是计算机语言中的一个关键字,可置于变量或者函数前,以表示变量或者函数的定义在别的文件中。提示编译器遇到此变量或函数时,在其它模块中寻找其定义,另外,extern也可用来进行链接指定。

  • C/C++ 中的 std::size_t offsetof(类型名和成员名)返回值是成员在该类型对象中以字节计算的的偏移量

  • 结构体中:char data[0];

    • https://blog.csdn.net/xy010902100449/article/details/46522533
    • 在结构中,data是一个数组名;但该数组没有元素;该数组的真实地址紧随结构体MyData之后,而这个地址就是结构体后面数据的地址(如果给这个结构体分配的内容大于这个结构体实际大小,后面多余的部分就是这个data的内容);这种声明方法可以巧妙的实现C语言里的数组扩展。
      实际用时采取这样:struct MyData *p = (struct MyData *)malloc(sizeof(struct MyData )+strlen(str))这样就可以通过p->data 来操作这个str。
    struct MyData 
    {
    int nLen;
    char data[0];
    };
     
    int main()
    {
     int nLen = 10;
    char str[10] = "123456789";
     
    cout << "Size of MyData: " <<sizeof(MyData) << endl;
     
    MyData *myData = (MyData*)malloc(sizeof(MyData) +10);
    memcpy(myData->data, str, 10);
     
    cout << "myData's Data is: " << myData->data << endl;
     
    free(myData);
     
    return 0;
    }
    //Size of MyData:4
    //myData"s Data is: 123456789
    

做map_reduce作业时遇到的一些问题和解决方案:

  • bash: syntax error near unexpected token `(’: 解决方法:avg(R5),max(R5),加转义符号

  • wrong value class: class org.apache.hadoop.io.Text is not class org.apache.h

    • combiner 的输出类型只能和 mapper 的输出类型一样,因为是在map本机做的,不管做多少遍都可以
    • reduce 的输入和mapper(combiner)的输出要相同,输入输出的类型一定要匹配上,并且MapReduce的核心其实就是如何选取key和value,以及对应的类型匹配
  • Java和Hadoop之间的类型转换(https://blog.csdn.net/u010022051/article/details/41870721

    • java基本类型与Hadoop常见基本类型的对照

      Long LongWritable
      Integer IntWritable
      Boolean BooleanWritable
      String Text
      
    • java类型转化为hadoop基本类型: 调用hadoop类型的构造方法,或者调用set()方法。

      • new LongWritable(123L);
      • LongWritable longwritable = new LongWritable();longwritable.set(123L);
      • Text text = new Text();String s = "aaaaaaa";text.set(s);
    • hadoop基本类型转化为java类型:对于Text,需要调用toString()方法,其他类型调用get()方法。

  • LongWritable key,Object key 区别是什么?默认的TextInputformat.

    • LongWritable的key是线的偏移量,表示该行在文件中的位置,而不是行号。
    • Object key应该就是没有具体的类别。
  • StringTokenizer itr = new StringTokenizer(value.toString(), “\n”);

    • while (itr.hasMoreTokens())如果是一行一行的文本文件,那么hasMoreTokens()指的是下一行还是这一行?应该是后者。先取这一行,看后面是否有需要的换行"\n",如果有就读取这一行itr.nextToken();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值