gpt4 book ai didi

hadoop - 如何使用Spark生成和输出多个Java对象?

转载 作者:行者123 更新时间:2023-12-02 20:46:32 26 4
gpt4 key购买 nike

我在hadoop文件系统hdfs上有一个CSV,我想使用以下框架将其转换为多个序列化的Java对象:

https://github.com/clarkduvall/serpy

我听说了avro和 Parquet 。我不想使用那些并且想要输出序列化的二进制文件。我的csv文件包含如下记录:
Name, Age, Date
Jordan, 1, 1/1/2017
John, 5, 2/2/2017

使用Hadoop或Spark可能吗?输出对象应可由普通的非hadoop / spark相关的Java程序读取。任何例子将不胜感激!

最佳答案

The output objects should be readable by a normal non-hadoop/spark related Java program



为此,您需要将结果保存在HDFS之外。因此,您可以做的是:
  • 使用Spark
  • 中的SparkContext.textFile从HDFS读取CSV数据
  • 使用RDD.take()将有限数量的行放入驱动程序
  • 这里的参数将是您想要的行数,例如myRdd.take(1000)抓取1000行
  • myRdd.collect()将捕获所有内容,但是如果您有大量数据,则可能会在 Spark 驱动程序
  • 上导致OutOfMemoryError
  • 现在,您将所有行作为数组,可以使用基本的Java序列化程序
  • 进行存储

    样例代码:
    val sc = new SparkContext(conf)
    val myRdd = sc.textFile("hdfs://namenode/mypath/myfile.csv")
    val myArray = myRdd.take(100000)
    //Store myArray to file using java serialiser

    如果要将序列化数据存储在HDFS上,可以执行以下操作:
    val sc = new SparkContext(conf)
    val myRdd = sc.textFile("hdfs://namenode/mypath/myfile.csv")
    myRdd.saveAsObjectFile("hdfs://namenode/mypath/myoutput.obj")

    这将保存一个Array [String]。您可以在第2行和第3行之间转换RDD,以使其对

    关于hadoop - 如何使用Spark生成和输出多个Java对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47805327/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com