1. 程式人生 > >Spark-Avro學習9之SCALA環境下Avro使用(不生成code方式)

Spark-Avro學習9之SCALA環境下Avro使用(不生成code方式)

1.與上篇類似,只是程式碼改下:

package org.apache.spark.avro.learning

import java.io.File
import java.text.SimpleDateFormat
import java.util.Date
import org.apache.avro.Schema
import org.apache.avro.file.DataFileReader
import org.apache.avro.file.DataFileWriter
import org.apache.avro.generic.GenericData
import org.apache.avro.generic.GenericDatumReader
import org.apache.avro.generic.GenericDatumWriter
import org.apache.avro.generic.GenericRecord

object AvroNoCode {

  def main(args: Array[String]): Unit = {
    val schema = new Schema.Parser().parse(new File(
      "file/data/avro/input/user.avsc"));
    val user1 = new GenericData.Record(schema);
    println(user1);
    user1.put("name", "Alyssa");
    user1.put("favorite_number", 256);

    val user2 = new GenericData.Record(schema);
    user2.put("name", "Ben");
    user2.put("favorite_number", 7);
    user2.put("favorite_color", "red");

    println("create user:");
    println(user1);
    println(user2);

    // Serialize user1 and user2 to disk
    val iString = new SimpleDateFormat("yyyyMMddHHmmssSSS")
      .format(new Date());
    val file = new File("file/data/avro/output/users" + iString + ".avro");
    val datumWriter = new GenericDatumWriter[GenericRecord] (
      schema);
    val dataFileWriter = new DataFileWriter[GenericRecord] (
      datumWriter);
    dataFileWriter.create(schema, file);
    dataFileWriter.append(user1);
    dataFileWriter.append(user2);
    dataFileWriter.close();

    // Deserialize users from disk
    val datumReader = new GenericDatumReader[GenericRecord] (
      schema);
   val dataFileReader = new DataFileReader[GenericRecord] (
      file, datumReader);
;
    var  user = null:GenericRecord;
    while (dataFileReader.hasNext()) {
      // Reuse user object by passing it to next(). This saves us from
      // allocating and garbage collecting many objects for files with
      // many items.
      user = dataFileReader.next(user);
      println(user);
    }

    println("end");
  }

}

2.執行結果:

{"name": null, "favorite_number": null, "favorite_color": null}
create user:
{"name": "Alyssa", "favorite_number": 256, "favorite_color": null}
{"name": "Ben", "favorite_number": 7, "favorite_color": "red"}
{"name": "Alyssa", "favorite_number": 256, "favorite_color": null}
{"name": "Ben", "favorite_number": 7, "favorite_color": "red"}
end

檔案:
Objavro.schema�{"type":"record","name":"User","namespace":"example.avro","fields":[{"name":"name","type":"string"},{"name":"favorite_number","type":["int","null"]},{"name":"favorite_color","type":["string","null"]}]}




相關推薦

Spark-Avro學習9SCALA環境Avro使用生成code方式

1.與上篇類似,只是程式碼改下: package org.apache.spark.avro.learning import java.io.File import java.text.Simpl

學習DB2Linux環境下載

文件的 express linux環境 兩個 下載地址 lan linu size SM 一 下載前的註冊IBM地址:https://www-01.ibm.com/marketing/iwm/iwm/web/pick.do?source=swg-db2expressc&am

Mark : Spark-Avro學習1使用SparkSQL讀取AVRO檔案

1.安裝:https://repo.maven.apache.org/maven2/com/databricks/spark-avro_2.10/2.0.1/  匯入到Spark專案裡檔案:https://github.com/databricks/spark-avro/ra

Spark-Avro學習4使用AvroWritePartitioned儲存AVRO檔案時進行劃分

1.主要是partition儲存avro檔案 2.程式碼: /** * @author xubo * @time 20160502 * ref https://github.com/datab

《新興實踐》學習筆記走進新興設計實踐目錄及主題梳理

目錄 走近新興設計實踐 設計模型:展望未來的設計教育 為徹底的關聯性而設計:以“關聯性設計”應對危險、併發的依存現實 製造與行動之間:論關聯性的設計教育學 關係能被設計麼?設計方法在社會創新中的作用

win10環境MySql5.7.21版本安裝過程出現安裝MySQL無法定位程式輸入點fesetround於動態連結庫

Mysql  安裝時報錯: 無法定位程式輸入點fesetround於動態連結庫MSVCR120.dll上 解決方法:下載 Microsoft Visual C++ 2013 Redistributable Package 安裝 http

Python學習筆記遍歷目錄檔案遞迴和walk()

python中遍歷指定目錄下所有的檔案和資料夾,包含多級目錄,有兩種方法,一種是通過遞迴思想去遍歷,另一種是os模組的walk()函式 要列出目錄結構 一.遞迴方法 #coding:utf-8 import os a

Android基礎學習筆記-ListView進階用法item圓角效果實現

今天簡單用快取優化方式實現了listview的功能,下面讓我們實現一下上篇文章留下來的改進方案:     1).實現item佈局的圓角效果     2).對listview的item進行監聽

快速學習html、css的經典筆記看後悔偶

Ø 行距:line-height  數字行距:p{font-size:12pt;line-height:2;}//12pt*2  單位行距:p{line-height:9pt;}  比例行距:p{font-size:10pt;line-height:140%;}//10pt*140% Ø 文字對齊

安卓 仿iOS實現圖片按變色攔截事件實現

先上圖 一張圖片實現按下變色。(關於鬆手後不會恢復的問題,設定點選事件就不會有這個問題了) 不得不說iOS在一些比安卓要方便很多,比如自帶這個變色的效果。 在網上搜索了一下,比如http://www.cnblogs.com/linjzong

ELK學習筆記CentOS 7ELK(6.2.4)++LogStash+Filebeat+Log4j日誌整合環境搭建

  0x00 簡介 現在的公司由於絕大部分專案都採用分散式架構,很早就採用ELK了,只不過最近因為額外的工作需要,仔細的研究了分散式系統中,怎麼樣的日誌規範和架構才是合理和能夠有效提高問題排查效率的。 經過仔細的分析和研究,確定下面的架構應該是比較合理的之一(Filebeat也支援直

LinuxNginx實現負載均衡 Nginx學習系列搭建環境

關於在本地虛擬機器(VMware 14)下安裝Linux同時安裝Nginx,請參考Nginx學習系列之搭建環境 1、啟動Nginx 在Nginx安裝成功的前提下,啟動Nginx 已root模式登陸(許可權需要),接著找到Nginx的安裝目錄,啟動Nginx,並且指定Nginx啟動所需的配置檔案,該檔

Scala學習11在eclipse使用scalatest外掛對scala檔案進行測試

一下在scala project和maven project都能跑 1.使用eclipse來安裝外掛: 按照【2】進入【3】,【3】沒有打包成功,mvn clean package報錯了 按照【2

spring4.2.9 java專案環境ioc原始碼分析 (九——refreshpostProcessBeanFactory方法

postProcessBeanFactory後處理beanFactory。時機是在所有的beanDenifition載入完成之後,bean例項化之前執行。比如,在beanfactory載入完成所有的bean後,想修改其中某個bean的定義,或者對beanFactory做一些其

spring4.2.9 java專案環境ioc原始碼分析——refreshobtainFreshBeanFactory方法@2處理Resource、載入Document及解析前準備

接上篇文章,上篇文章講到載入完返回Rescouce。先找到要解析的程式碼位置,在AbstractBeanDefinitionReader類的loadBeanDefinitions(String location, Set<Resource> actualResou

spring4.2.9 java專案環境ioc原始碼分析——refreshobtainFreshBeanFactory方法@4預設標籤bean,beans解析、最終註冊

接上篇文章,解析了import和alias標籤,只是開胃菜比較簡單,下面介紹bean標籤的載入,也是預設名稱空間下解析的重點。protected void processBeanDefinition(Element ele, BeanDefinitionParserDeleg

spring4.2.9 java專案環境ioc原始碼分析——refreshobtainFreshBeanFactory方法@3預設標籤import,alias解析

接上篇文章,到了具體解析的時候了,具體的分為兩種情況,一種是預設名稱空間的標籤<bean>;另一種是自定義名稱空間的標籤比如<context:xxx>,<tx:xxx>等。先看下預設的名稱空間的標籤解析。protected void par

spring4.2.9 java專案環境ioc原始碼分析 (十四——refreshonRefresh方法

這個方法是空的。解釋是在特定的上下文中初始化特別的beans。可以看到其也是用於初始化的。看了StaticWebApplicationContext、AbstractRefreshableWebApplicationContext、GenericWebApplicationC

spring4.2.9 java專案環境ioc原始碼分析——refreshobtainFreshBeanFactory方法@1準備工作與載入Resource

obtainFreshBeanFactory方法從字面的意思看獲取新的Bean工廠,實際上這是一個過程,一個載入Xml資源並解析,根據解析結果組裝BeanDefinitions,然後初始化BeanFactory的過程。在載入Xml檔案之前,spring還做了一些其他的工作,比

Spark中元件Mllib的學習9ALS訓練的model來預測資料的準確率研究

1解釋 研究ALS的準確率 2.程式碼: package org.apache.spark.mllib.learning.recommend import java.text.SimpleDateFormat import java.util.D