当前位置: 首页 > 知识库问答 >
问题:

如何在Spark中跳过RDD中的多行标题

海保臣
2023-03-14
1253
545553
12344896
1 2 1
1 43 2
1 46 1
1 53 2

现在前3个整数是我需要广播的一些计数器。之后,所有行都具有相同的格式,如

1 2 1
1 43 2

我将在3个计数器后的所有这些值映射到一个新的RDD后,用它们在函数中做一些计算。但我无法理解如何分离前3个值,并正常映射其余值。

我的Python代码是这样的

documents = sc.textFile("file.txt").map(lambda line: line.split(" "))

final_doc = documents.map(lambda x: (int(x[0]), function1(int(x[1]), int(x[2])))).reduceByKey(lambda x, y: x + " " + y)

共有1个答案

禄烨然
2023-03-14

> Python 2的

  • 导入

    from __future__ import print_function
    

    准备虚拟数据:

    s = "1253\n545553\n12344896\n1 2 1\n1 43 2\n1 46 1\n1 53 2"
    with open("file.txt", "w") as fw: fw.write(s)
    

    读取原始输入:

    raw = sc.textFile("file.txt")
    
    header = raw.take(3)
    print(header)
    ### [u'1253', u'545553', u'12344896']
    
    content = raw.zipWithIndex().filter(lambda kv: kv[1] > 2).keys()
    print(content.first())
    ## 1 2 1
    
    from itertools import islice
    
    content = raw.mapPartitionsWithIndex(
        lambda i, iter: islice(iter, 3, None) if i == 0 else iter)
    
    print(content.first())
    ## 1 2 1
    

  •  类似资料:
    • 假设我给出了三个指向Spark上下文的文件路径来读取,每个文件的第一行都有一个模式。如何从标题中跳过模式行? 现在,我们如何从这个RDD跳过标题行呢?

    • 阅读Spark method sortByKey: 是否可能只返回“N”个数量的结果。因此,与其返回所有结果,不如返回前10名。我可以将已排序的集合转换为数组,并使用方法,但既然这是一个O(N)操作,有没有更有效的方法?

    • 2)在控制器中执行groupby,然后在map中运行由外部库提供的非并行kmeans。 请告诉我还有别的办法,我宁愿尽可能的拥有一切。

    • 假设我希望根据的对其进行分区。 通过覆盖方法对进行分区,并且只使用的hashcode是否正确? 但是,鉴于接受了许多分区参数,我不知道是否需要事先知道种类的数量,如果种类多于分区,会发生什么? 我的目标是打电话 并且在迭代器中只有具有相同的值。

    • 我尝试创建一个JavaRDD,其中包含另一系列RDD。 RDD机器。foreach(机器- 第一:有没有可能这样做?如果没有,我可以用什么方式尝试做一些不同的事情? 让我展示一下我尝试做的事情: 我尝试在每台机器上启动我的算法,这台机器必须从Elasticsearch中的数据中学习。 因此,我尝试在每个“机器”中获取查询的所有数据。我的问题是:Spark有可能做到这一点吗?或者以其他方式?当我点燃

    • 我有两个类。请求DTO和实体。我想将请求DTO映射到实体。在这种情况下,我想手动插入实体属性之一,这意味着属性不在请求DTO中。如何使用模型映射器实现这一点。 但这不起作用,它说它不能将字符串转换为长字符串。我要求解决这个问题,或者采取更好的方法。