【问题标题】:Read avro data using spark dataset in java在 java 中使用 spark 数据集读取 avro 数据
【发布时间】:2016-08-22 00:08:07
【问题描述】:

我是 spark 的新手,我正在尝试使用 java 加载 avro 数据来触发“数据集”(spark 1.6)。我在 scala 中看到了一些示例,但在 java 中没有。 任何指向 java 中示例的指针都会有所帮助。我尝试创建一个 javaRDD,然后将其转换为“数据集”。我相信必须有一条直截了当的方法。

【问题讨论】:

  • 其实我也遇到过这个问题,想不通。不知道您是如何创建 RDD 的,但我在不知道架构的情况下从 Kafka 接收它们。因此,要创建 DataSet,我必须更改发送数据的格式:而不是 avro 序列化数据,而是 json-string。之后我简单地使用了:session.read().json(JavaRDD);。或者,如果您仍想使用 avro,那么我认为方法是将其放入 avro 文件和session.read().format("avro").load("avrofile.avro");(虽然不确定格式字符串值)。仍然希望有一些简单的方法,所以将问题添加到收藏夹。
  • 但也许你会在这里找到适合你的例子spark.apache.org/docs/latest/sql-programming-guide.html。只需选择 Java 选项卡。
  • 我能够使用 Dataset df = spark.read().format("com.databricks.spark.avro") .load("users.avro") 读取 avro 数据其中 users.avro 是数据文件,而 User.avsc 是我使用的架构。但我无法将 Dataset 转换为 Dataset。我试过 Encoder UserEncoder = Encoders.bean(User.class); /*(User.class 是 avro 生成的类) */ Dataset df = spark.read().format("com.databricks.spark.avro") .load("users.avro").as(用户编码器);

标签: apache-spark apache-spark-dataset spark-avro


【解决方案1】:

首先你需要设置hadoop.home.dir

System.setProperty("hadoop.home.dir", "C:/app/hadoopo273/winutils-master/hadoop-2.7.1");

然后创建一个 Spark 会话,指定 avro 文件的位置

SparkSession spark = SparkSession .builder().master("local").appName("ASH").config("spark.cassandra.connection.host", "127.0.0.1").config("spark.sql.warehouse.dir", "file:///C:/cygwin64/home/a622520/dev/AshMiner2/cass-spark-embedded/cassspark/cassspark.all/spark-warehouse/").getOrCreate();

在我的代码中,我使用的是嵌入式 Spark 环境

// Creates a DataFrame from a specified file
Dataset<Row> df = spark.read().format("com.databricks.spark.avro") .load("./Ash.avro");
df.createOrReplaceTempView("words");
Dataset<Row> wordCountsDataFrame = spark.sql("select count(*) as total from words");
wordCountsDataFrame.show();

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2015-12-22
    • 2016-05-02
    • 2017-04-01
    • 2018-10-30
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    相关资源
    最近更新 更多