在c中使用mapreduce代码有什么问题?

vawmfj5a  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(423)

每行的格式是:date\ttime\tstore name\titem description\tcost\t付款方式我们需要元素2(商店名称)和4(成本),我们需要将它们写入标准输出,用制表符分隔
我想知道每家商店的总销售额。我通过手动输入数据进行了检查,但在mapreduce上似乎不起作用。我希望找出问题及其解决方案,如果可能的话,建议避免此类问题再次发生,因为我是从udacity教程中自学的。
制图器


# include<stdio.h>

main()
{

size_t p;
int i,j,k;
char *A,*a;
char *store,*cost;
while(getline(&A,&p,stdin) != -1)
{
    i=0,j=0,k=0;
     for(a=A;*a!='\n'&& i<=5;a++)
    {
        if(*a=='\t')
        {
            i++;
            if(i==2)
            store=a+1;
            if(i==4)
            cost=a+1;
            *a='\0';

        }       

    }
    if(i==5)
    printf("%s\t%s",store,cost);

}   

}

减速机


# include<stdio.h>

# include<string.h>

main()
{
size_t p;
int i,j,k,flag=0;
char *A,*a;
char storenow[100]={0},*sval,storepre[100]={0};
double val,valpre;
while(getline(&A,&p,stdin) != -1)
{
    strcpy(storepre,storenow);
    valpre=val;
    a=A;
    while(*A!='\t')
    A++;
    *A='\0';
    A++;
    sval=A;
    sscanf(sval,"%lf",&val);
    strcpy(storenow,a);

    if(!(strcmp(storenow,storepre))||!flag)
    val=val+valpre;
    else
    printf("%s\t%lf\n",storepre,valpre);
    flag=1;
}

    printf("%s\t%lf\n",storenow,val);

}
4ioopgfo

4ioopgfo1#

不管算法有什么问题,程序都使用 getline() 错了。
输出指针应初始化为 NULL 在调用之前,否则它将被解释为已分配。你应该 free() 在某个点的线。
我还认为,通过使用 sscanf() (甚至 scanf() 直接在输入流上),而不是执行自己的标记化循环。但是,如果您真的需要支持任意长的输入行,这可能会有问题。

相关问题