1. 程式人生 > >Spark2.X讀取多種檔案格式資料

Spark2.X讀取多種檔案格式資料

Spark2.0+的檔案讀取

轉載自:點選開啟連結  https://blog.csdn.net/next__one/article/details/78840908

Spark可以讀取多種格式檔案,csv,json,parque。因此對應就有很多函式與之對應。在Spark2.0以後一般使用SparkSession來操作DataFrame、Dataset來完成資料分析。這些讀取不同格式檔案的函式就是SparkSession的成員DataFrameReader的方法。該類就是將檔案系統(HDFS,LocalFileSystem(一定要在每臺機器上都有的檔案,不然會找不到檔案,因為不確定executor會在哪臺機器上執行,如果是本地檔案,執行executor機器上一定要有該檔案))中的檔案讀取到Spark中,生成DataFrame的類。下面來看看具體的檔案讀取。

1.CSV

其實該方法叫CSV不是很好,因為它不止可以讀CSV檔案,他可以讀取一類由分隔符分割資料的檔案,由於這類檔案中CSV是代表,所以該函式才叫CSV吧。 
1.1標準CSV 
csv資料 
特徵:有空值?表示,有表頭,型別明確

"id_1","id_2","cmp_fname_c1","cmp_fname_c2","cmp_lname_c1","cmp_lname_c2","cmp_sex","cmp_bd","cmp_bm","cmp_by","cmp_plz","is_match"
41264,44629,1,?,1,?,1,1,1,1,1,TRUE
28871,41775,1,?,1,?,1
,1,1,1,1,TRUE 99344,99345,1,?,1,?,1,1,1,1,1,TRUE 31193,66985,1,?,1,?,1,1,1,1,0,TRUE 24429,25831,1,?,1,?,1,1,1,1,1,TRUE 23571,49029,1,?,1,?,1,1,1,1,1,TRUE 6884,6885,1,?,1,?,1,1,1,1,1,TRUE 7144,9338,1,?,1,?,1,1,1,1,1,TRUE

spark程式碼:

val spark = SparkSession.builder().appName("fileRead").getOrCreate()
        import
spark.implicits._ val data1 = spark.read // 推斷資料型別 .option("inferSchema", true) // 設定空值 .option("nullValue", "?") // 表示有表頭,若沒有則為false .option("header", true) // 檔案路徑 .csv("ds/block_10.csv") // 快取 .cache() // 列印資料格式 data1.printSchema() // 顯示資料,false引數為不要把資料截斷 data1.show(false)

效果: 
這裡寫圖片描述 
1.2TSV 
TSV資料 
特徵:無頭,有資料型別,\t分割

196 242 3   881250949
186 302 3   891717742
22  377 1   878887116
244 51  2   880606923
166 346 1   886397596
298 474 4   884182806
115 265 2   881171488
253 465 5   891628467
305 451 3   886324817
6   86  3   883603013

spark程式碼:

val cols = Seq("user_id", "item_id", "rating", "timestamp")
        val data2 = spark.read
            //          推斷資料型別
            .option("inferSchema", true)
            //          沒有表頭false
            .option("header", false)
            //          指定分隔符
            .option("delimiter", "\t")
            .csv("movie/u.data")
            //          設定頭
            .toDF(cols: _*)
            .cache()
        data2.printSchema()
        data2.show()
        //      計數
        data2.count()

結果: 
這裡寫圖片描述

2.JSON檔案

JSON不像CSV那樣,他是半結構化的資料,因此他可以表示更加複雜的資料型別,但是缺點也同樣明顯,儲存同樣的資料,JSON檔案更大。 
資料:有點複雜,介紹一下 
軌跡ID long,使用者ID long,time timestamp,td string,trail [id int ,ts long,alt double,lon double ,alt double,d string] 
主要就是大物件裡面有一個數組,數組裡面有很多小物件(數量不固定),csv是難以表示這種資料的。 
這裡寫圖片描述
但是。。。處理起來很簡單

val jsonpath = "/home/wmx/hive/warehouse/trail/sample40.json"
val data3 = spark.read.json(jsonpath).cache()
data3.printSchema()
// 因為有點多隻顯示1條,不截斷
data3.show(1,false)

結果 
這裡大家可以看到,時間戳資料被解析成string了,但是spark內建的資料型別是支援Date的 
這裡寫圖片描述 
因此要處理資料型別: 
改為

//      按順序把型別全寫下來
        val schema: StructType = StructType(Seq(
            StructField("tid", IntegerType, true),
            StructField("uid", IntegerType, true),
            StructField("st", TimestampType, true),
            StructField("td", StringType, true),
            StructField("trail", ArrayType(StructType(Seq(
                StructField("id", IntegerType, true),
                StructField("ts", LongType, true),
                StructField("lat", DoubleType, true),
                StructField("alt", DoubleType, true),
                StructField("lon", DoubleType, true),
                StructField("d", StringType, true)))), true)));
        val data4 = spark.read
            .schema(schema)
            .json(jsonpath)
            .cache()
        data4.printSchema()
        data4.show(1, true)

結果: 
型別完全匹配: 
這裡寫圖片描述 

相關推薦

Spark2.X讀取多種檔案格式資料

Spark2.0+的檔案讀取轉載自:點選開啟連結  https://blog.csdn.net/next__one/article/details/78840908Spark可以讀取多種格式檔案,csv,json,parque。因此對應就有很多函式與之對應。在Spark2.0

最新版Spark2.2讀取多種檔案格式資料

Spark2.0+的檔案讀取 Spark可以讀取多種格式檔案,csv,json,parque。因此對應就有很多函式與之對應。在Spark2.0以後一般使用SparkSession來操作DataFrame、Dataset來完成資料分析。這些讀取不同格式檔案的函式就是SparkSessi

Java讀取多種檔案格式檔案(pdf,pptx,ppt,doc,docx...)

通過開源pdfbox和poi進行處理多種檔案格式的文字讀入 1.需要的jar的maven座標: <dependency> <groupId>org.apache.pdfbox</groupId> <

spark2 sql讀取json檔案格式要求

問題導讀1.spark2 sql如何讀取json檔案?2.spark2讀取json格式檔案有什麼

C++如何讀取txt檔案資料並且以二位陣列存到記憶體中

本次實驗主要的目的就是讀取txt的資料,在上次博文中說到如何讀取txt的資料,那篇博文讀了一行資料並存在了一個一維向量中,本次實現讀取二維向量。直接上程式碼: 解釋一下:程式碼中的40代表有40行,8064代表有8064列。 #include <iostream> #includ

java讀取配置檔案.properties資料

util.properties testkey=test123 java_web: import java.util.Properties; import org.springframework.stereotype.Component; /** * 獲取配置檔案資訊

C#不用ArcEngine,生成Shp檔案(二)---------讀取.shp檔案格式

上一篇介紹了Shape files檔案結構,在這一篇,以面檔案為例,寫一下如何讀取.shp檔案,以面檔案為例。 首先在ArcMap裡面新建一個名為  三角形面   的 shp檔案,用做測試資料。如下 測試資料下載地址為:http://download.csdn.net/d

讀取csv檔案資料

 在處理資料時,我們往往發現csv檔案中的資料並不是我們都需要的。我們往往需要指定列: 方法一:使用pandas讀取csv檔案的指定列: https://blog.csdn.net/grey_csdn/article/details/70186735  data =

程式讀取配置檔案資料顯示在頁面上

1.首先在配置檔案中增加要讀取的資料 cas.cmCustPayment.receiptInvoiceName=\u9996\u94A2\u667A\u65B0\u8FC1\u5B89\u7535\u78C1\u6750\u6599\u6709\u9650\u516C\u53F8 ca

基於ConfigManager讀取配置檔案資料

獲取配置檔案的配置資訊(比如資料庫的配置資訊,redis的配置資訊) 如何讓使用者只能建立一個ConfigManager?單例模式:(1)把構造方法私有 (2)程式提供給別人唯一物件 單例模式的兩種實現方式:餓漢方式 懶漢方式(執行緒不安全) 提供給別人一個唯一的C

SparkSQL寫入多種檔案格式

需求: 將資料庫中的資料讀取出來並以text  json  csv三種格式寫入到本地檔案或者hdfs中 csv格式:能夠以excel的形式開啟  程式碼實現: package cn.ysjh0014.SparkSql import java.util.Propert

讀取xlsl檔案資料

package com.sxf; import java.io.FileInputStream; import java.io.IOException; import org.apache.poi.xssf.usermodel.XSSFCell; import

DCMTK讀取DICOM檔案-----獲取資料集-----建立DicomDIr

  The following example shows how to load a DICOM file and output the patient's name: DcmFileFormat fileformat; OFCondition status = fileform

伺服器公共庫開發--讀取ini檔案格式的類

/********************************************************************    created:    2008/07/28    filename:     config.h    author:        Lichuang       

SpringMVC 實現POI讀取Excle檔案資料匯入資料庫(上傳)、匯出資料庫中資料到Excle檔案中(下載)

package com.shiliu.game.utils; import java.io.OutputStream; import java.net.URLEncoder; import java.util.ArrayList; import java.util.List; import

C++:依次讀取TXT檔案各行資料

// FileHandle.cpp : 定義控制檯應用程式的入口點。 // #include "stdafx.h" #include <iostream> #include <fstream> #include <string> int main() { s

python處理CSV檔案格式資料

1、CSV檔案 要在文字檔案中儲存資料,最簡單的方式是將資料作為一系列以逗號分隔的值(CSV)寫入檔案,這樣的檔案稱為CSV檔案。 2、分析CSV檔案頭 1)呼叫csv.reader()將儲存的檔案物件作為實參傳遞給它,從而建立一個與檔案相關聯的閱讀器物件

matlab讀取文字檔案資料檔案

matlab檔案讀取總結 matlab的檔案讀取函式功能可以讀取各種檔案型別,包括: textread(字母和數值每行格式一致) xlsread(讀取excel檔案) importdata(字母和數

MATLAB讀取fig檔案中的資料(得到x、y資料

https://zhidao.baidu.com/question/256057475.html 注意大小寫!! 假設你的圖片是figure1,使用下面的語句即可得到圖上點的座標 h=open('A.fig'); a=get(h); b=get(a.Children); c=get(b.Ch

如何讀取pkl的檔案資料並存入txt格式

開啟.pkl檔案程式碼: import cPickle as pickle f = open('test.pkl') inf = pickle.load(f) print inf 再開啟一個txt檔案,向內寫入剛才讀取的資訊 ft = open('te