国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

將Parquet文件的數(shù)據(jù)導(dǎo)入Hive 、JSON文件導(dǎo)入ES

這篇具有很好參考價(jià)值的文章主要介紹了將Parquet文件的數(shù)據(jù)導(dǎo)入Hive 、JSON文件導(dǎo)入ES。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

將Parquet文件的數(shù)據(jù)導(dǎo)入Hive

查詢(xún)parquet文件格式

主要利用社區(qū)工具 https://github.com/apache/parquet-mr/

編譯cli工具

 cd parquet-cli;
 mvn clean install -DskipTests;

查看元數(shù)據(jù)信息

 java -cp parquet-cli-1.13.1.jar;dependency/* org.apache.parquet.cli.Main meta yellow_tripdata_2023-03.parquet

將Parquet文件的數(shù)據(jù)導(dǎo)入Hive 、JSON文件導(dǎo)入ES

查詢(xún)抽樣數(shù)據(jù)

 java -cp parquet-cli-1.13.1.jar;dependency/* org.apache.parquet.cli.Main head -n 2 yellow_tripdata_2023-03.parquet
{"VendorID": 2, "tpep_pickup_datetime": 1677629203000000, "tpep_dropoff_datetime": 1677629803000000, "passenger_count": 1, "trip_distance": 0.0, "RatecodeID": 1, "store_and_fwd_flag": "N", "PULocationID": 238, "DOLocationID": 42, "payment_type": 2, "fare_amount": 8.6, "extra": 1.0, "mta_tax": 0.5, "tip_amount": 0.0, "tolls_amount": 0.0, "improvement_surcharge": 1.0, "total_amount": 11.1, "congestion_surcharge": 0.0, "Airport_fee": 0.0}
{"VendorID": 2, "tpep_pickup_datetime": 1677629305000000, "tpep_dropoff_datetime": 1677631170000000, "passenger_count": 2, "trip_distance": 12.4, "RatecodeID": 1, "store_and_fwd_flag": "N", "PULocationID": 138, "DOLocationID": 231, "payment_type": 1, "fare_amount": 52.7, "extra": 6.0, "mta_tax": 0.5, "tip_amount": 12.54, "tolls_amount": 0.0, "improvement_surcharge": 1.0, "total_amount": 76.49, "congestion_surcharge": 2.5, "Airport_fee": 1.25}      

parquet 和 hive 的 field 類(lèi)型映射關(guān)系

parquet 字段類(lèi)型 hive 字段類(lèi)型
BINARY STRING
BOOLEAN BOOLEAN
DOUBLE DOUBLE
FLOAT FLOAT
INT32 INT
INT64 BIGINT
INT96 TIMESTAMP
BINARY + OriginalType UTF8 STRING
BINARY + OriginalType DECIMAL DECIMAL

創(chuàng)建hive表 數(shù)據(jù)存儲(chǔ)格式采用parquet

# 創(chuàng)建以parquet存儲(chǔ)的表
  CREATE TABLE `test_trino.yellow_taxi_trip_records_tmp`
(
  `VendorID` int COMMENT '儀表供應(yīng)商ID', 
  `tpep_pickup_datetime` TIMESTAMP COMMENT '儀表啟動(dòng)時(shí)間', 
  `tpep_dropoff_datetime` TIMESTAMP COMMENT '儀表關(guān)閉時(shí)間',
  `passenger_count` bigint COMMENT '乘客數(shù)量', 
  `trip_distance` double COMMENT '行程距離',
  `RateCodeID` bigint COMMENT '費(fèi)率編碼',
  `store_and_fwd_flag` string COMMENT '是否存儲(chǔ)',
  `PULocationID` bigint COMMENT '上車(chē)區(qū)域坐標(biāo)',
  `DOLocationID` bigint COMMENT '下場(chǎng)區(qū)域坐標(biāo)',
  `payment_type` bigint COMMENT '付款方式',
  `fare_amount` double COMMENT '票價(jià)',
  `extra` double COMMENT '雜費(fèi)附加費(fèi)',
  `mta_tax` double COMMENT '稅費(fèi)',
  `tip_amount` double COMMENT '小費(fèi)',
  `tolls_amount` double COMMENT '過(guò)路費(fèi)',
  `improvement_surcharge` double COMMENT '改善附加費(fèi)',
  `total_amount` double COMMENT '費(fèi)用總計(jì),不包含現(xiàn)金小費(fèi)',
  `congestion_surcharge` double COMMENT '擁堵費(fèi)',
  `airport_fee` double COMMENT '機(jī)房上下車(chē)費(fèi)用'
)
COMMENT '黃色的出租車(chē)記錄'
PARTITIONED BY ( 
  `ym` string COMMENT '分區(qū)字段,年月(yyyyMM)')
STORED AS PARQUET;

加載文件

  # 利用hive客戶(hù)端load parquet數(shù)據(jù)
    LOAD DATA LOCAL INPATH '/opt/yellow_tripdata_2023-02.parquet' OVERWRITE INTO TABLE `test_trino.yellow_taxi_trip_records_tmp` PARTITION (ym=202302);

將json數(shù)據(jù)導(dǎo)入ES

ES批量導(dǎo)入api

批量寫(xiě)入es需要使用bulk api,這個(gè)API支持json文件的數(shù)據(jù)導(dǎo)入。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-476257.html

原始json文件內(nèi)容

{"geonameid": 2986043, "name": "Pic de Font Blanca", "latitude": 42.64991, "longitude": 1.53335, "country_code": "AD", "population": 0}
{"geonameid": 2994701, "name": "Roc Mélé", "latitude": 42.58765, "longitude": 1.74028, "country_code": "AD", "population": 0}
{"geonameid": 3007683, "name": "Pic des Langounelles", "latitude": 42.61203, "longitude": 1.47364, "country_code": "AD", "population": 0}
{"geonameid": 3017832, "name": "Pic de les Abelletes", "latitude": 42.52535, "longitude": 1.73343, "country_code": "AD", "population": 0}
{"geonameid": 3017833, "name": "Estany de les Abelletes", "latitude": 42.52915, "longitude": 1.73362, "country_code": "AD", "population": 0}
{"geonameid": 3023203, "name": "Port Vieux de la Coume d’Ose", "latitude": 42.62568, "longitude": 1.61823, "country_code": "AD", "population": 0}
{"geonameid": 3029315, "name": "Port de la Cabanette", "latitude": 42.6, "longitude": 1.73333, "country_code": "AD", "population": 0}
{"geonameid": 3034945, "name": "Port Dret", "latitude": 42.60172, "longitude": 1.45562, "country_code": "AD", "population": 0}
{"geonameid": 3038814, "name": "Costa de Xurius", "latitude": 42.50692, "longitude": 1.47569, "country_code": "AD", "population": 0}
{"geonameid": 3038815, "name": "Font de la Xona", "latitude": 42.55003, "longitude": 1.44986, "country_code": "AD", "population": 0}
{"geonameid": 3038816, "name": "Xixerella", "latitude": 42.55327, "longitude": 1.48736, "country_code": "AD", "population": 0}
{"geonameid": 3038818, "name": "Riu Xic", "latitude": 42.57165, "longitude": 1.67554, "country_code": "AD", "population": 0}
{"geonameid": 3038819, "name": "Pas del Xic", "latitude": 42.49766, "longitude": 1.57597, "country_code": "AD", "population": 0}
{"geonameid": 3038820, "name": "Roc del Xeig", "latitude": 42.56068, "longitude": 1.4898, "country_code": "AD", "population": 0}

索引結(jié)構(gòu)

PUT allcountries
{
  "settings": {
    "index.number_of_replicas": 0
  },
  "mappings": {
        "_doc":{
            "dynamic": "strict",
            "properties": {
              "geonameid": {
                "type": "long"
              },
              "name": {
                "type": "text"
              },
              "latitude": {
                "type": "double"
              },
              "longitude": {
                "type": "double"
              },
              "country_code": {
                "type": "text"
              },
              "population": {
                "type": "long"
              }
            }
        }
  }
}

重組json腳本

# coding=UTF-8
# 將原始josn重組出適合ES bulk API導(dǎo)入的JSON數(shù)據(jù)
import json
import os
import io
current_path = os.path.dirname(__file__)
#w打開(kāi)一個(gè)文件只用于寫(xiě)入,r用于只讀
#如果該文件已存在則打開(kāi)文件,并從開(kāi)頭開(kāi)始編輯,即原有內(nèi)容會(huì)被刪除
#如果該文件不存在,創(chuàng)建新文件
new_jsonfile = io.open(current_path+'/es-test-bulk.json','w',encoding='utf-8')

with io.open(current_path+'/es-test.json','r',encoding='utf-8')as fp:
    for line in fp.readlines():
        json_data=json.loads(line)
        #添加index行
        new_data={}
        new_data['index']={}
        new_data['index']['_index']="allCountries"
        temp=json.dumps(new_data).encode("utf-8").decode('unicode_escape')
        new_jsonfile.write(temp)
        new_jsonfile.write('\n'.decode('utf-8'))

        #原json對(duì)象處理為1行
        old_data={}
        old_data['geonameid']=json_data['geonameid']
        old_data['name']=json_data['name']
        old_data['latitude']=json_data['latitude']
        old_data['longitude']=json_data['longitude']
        old_data['country_code']=json_data['country_code']
        old_data['population']=json_data['population']
        temp=json.dumps(old_data).encode("utf-8").decode('unicode_escape')
        new_jsonfile.write(temp)
        new_jsonfile.write('\n'.decode('utf-8'))
        
new_jsonfile.close()

重組后的json文件

{"index": {"_index": "allcountries"}}
{"name": "El Barrerol", "geonameid": 3040809, "longitude": 1.45207, "country_code": "AD", "latitude": 42.439579999999999, "population": 0}
{"index": {"_index": "allcountries"}}
{"name": "Camí d’Easagents", "geonameid": 3040810, "longitude": 1.61341, "country_code": "AD", "latitude": 42.53349, "population": 0}
{"index": {"_index": "allcountries"}}
{"name": "Pleta de Duedra", "geonameid": 3040811, "longitude": 1.4949399999999999, "country_code": "AD", "latitude": 42.625540000000001, "population": 0}
{"index": {"_index": "allcountries"}}
{"name": "Pleta de Duedra", "geonameid": 3040812, "longitude": 1.5637000000000001, "country_code": "AD", "latitude": 42.61985, "population": 0}
{"index": {"_index": "allcountries"}}
{"name": "Plana Duedra", "geonameid": 3040813, "longitude": 1.5228900000000001, "country_code": "AD", "latitude": 42.59393, "population": 0}
{"index": {"_index": "allcountries"}}
{"name": "Planella del Duc", "geonameid": 3040814, "longitude": 1.4995700000000001, "country_code": "AD", "latitude": 42.456490000000002, "population": 0}
{"index": {"_index": "allcountries"}}
{"name": "Canal del Duc", "geonameid": 3040815, "longitude": 1.6195600000000001, "country_code": "AD", "latitude": 42.576920000000001, "population": 0}
{"index": {"_index": "allcountries"}}
{"name": "Canal Dreta", "geonameid": 3040816, "longitude": 1.5381, "country_code": "AD", "latitude": 42.551319999999997, "population": 0}
{"index": {"_index": "allcountries"}}
{"name": "Canal Dreta", "geonameid": 3040817, "longitude": 1.4865900000000001, "country_code": "AD", "latitude": 42.506630000000001, "population": 0}
{"index": {"_index": "allcountries"}}
{"name": "Port Dret", "geonameid": 3040818, "longitude": 1.7001299999999999, "country_code": "AD", "latitude": 42.573979999999999, "population": 0}

bulk api調(diào)用

curl -H "Content-Type: application/x-ndjson"  -XPOST "192.168.1.1:9600/allcountries/_doc/_bulk" --data-binary @"/opt/es-documents-bulk.json"

到了這里,關(guān)于將Parquet文件的數(shù)據(jù)導(dǎo)入Hive 、JSON文件導(dǎo)入ES的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Hive數(shù)據(jù)存儲(chǔ)格式有哪些?TextFile、SequenceFile、RCFile、ORCFile、Parquet有什么區(qū)別?為什么絕大多數(shù)都使用ORCFile、Parquet格式?

    Hive數(shù)據(jù)存儲(chǔ)格式有哪些?TextFile、SequenceFile、RCFile、ORCFile、Parquet有什么區(qū)別?為什么絕大多數(shù)都使用ORCFile、Parquet格式?

    Hive 的數(shù)據(jù)存儲(chǔ),是 Hive 操作數(shù)據(jù)的基礎(chǔ)。 選擇一個(gè)合適的底層數(shù)據(jù)存儲(chǔ)文件格式,即使在不改變當(dāng)前 Hive SQL 的情況下,性能也能得到數(shù)量級(jí)的提升 。 這種優(yōu)化方式對(duì) MySQL 等關(guān)系型數(shù)據(jù)庫(kù)有些類(lèi)似,選擇不同的數(shù)據(jù)存儲(chǔ)引擎,代表著不同的數(shù)據(jù)組織方式,對(duì)于數(shù)據(jù)庫(kù)的表現(xiàn)

    2024年02月02日
    瀏覽(29)
  • 一百三十三、Hive——Hive外部表加載含有JSON格式字段的CSV文件數(shù)據(jù)

    一百三十三、Hive——Hive外部表加載含有JSON格式字段的CSV文件數(shù)據(jù)

    在Hive的ODS層建外部表,然后加載HDFS中的CSV文件數(shù)據(jù) 注意 :CSV文件中含有未解析的JSON格式的字段數(shù)據(jù),并且JSON字段中還有逗號(hào) JSON數(shù)據(jù)的字段track_data只顯示一部分?jǐn)?shù)據(jù),因?yàn)镴SON格式數(shù)據(jù)里面也含有逗號(hào) [{\\\"id\\\":\\\"14\\\",\\\"length\\\":5.0,\\\"height\\\":3.0,\\\"posX\\\":63.0,\\\"posY\\\":37.0,\\\"acs\\\":99.0,\\\"angle\\\":83.0,\\\"alti

    2024年02月16日
    瀏覽(22)
  • Hive 表 DML 操作 第1關(guān):將文件中的數(shù)據(jù)導(dǎo)入(Load)到 Hive 表中

    Hive 表 DML 操作 第1關(guān):將文件中的數(shù)據(jù)導(dǎo)入(Load)到 Hive 表中

    相關(guān)知識(shí) 之前系列實(shí)訓(xùn)中我們接觸過(guò)導(dǎo)入本地文件到 Hive 表中,本關(guān)就進(jìn)行導(dǎo)入的詳細(xì)講解。 為了完成本關(guān)任務(wù),你需要掌握:1.導(dǎo)入命令語(yǔ)法,2.如何將本地 txt 文件導(dǎo)入到分區(qū)表中。 導(dǎo)入命令語(yǔ)法 Load 操作執(zhí)行 copy/move 命令把數(shù)據(jù)文件 copy/move 到 Hive 表位于 HDFS 上的目錄位

    2024年02月01日
    瀏覽(19)
  • 二百一十、Hive——Flume采集的JSON數(shù)據(jù)文件寫(xiě)入Hive的ODS層表后字段的數(shù)據(jù)殘缺

    二百一十、Hive——Flume采集的JSON數(shù)據(jù)文件寫(xiě)入Hive的ODS層表后字段的數(shù)據(jù)殘缺

    在用Flume把Kafka的數(shù)據(jù)采集寫(xiě)入Hive的ODS層表的HDFS文件路徑后,發(fā)現(xiàn)HDFS文件中沒(méi)問(wèn)題,但是ODS層表中字段的數(shù)據(jù)卻有問(wèn)題,字段中的JSON數(shù)據(jù)不全 1、ODS層建靜態(tài)分區(qū)外部表,F(xiàn)lume直接寫(xiě)入ODS層表的HDFS路徑下 2、用get_json_object進(jìn)行解析 注意 :使用JsonSerDe時(shí),每行必須是一個(gè)完整

    2024年02月03日
    瀏覽(22)
  • 1、通過(guò)億級(jí)數(shù)據(jù)量在hive和impala中查詢(xún)比較text、orc和parquet性能表現(xiàn)(二)

    1、通過(guò)億級(jí)數(shù)據(jù)量在hive和impala中查詢(xún)比較text、orc和parquet性能表現(xiàn)(二)

    本文通過(guò)在hdfs中三種不同數(shù)據(jù)格式文件存儲(chǔ)相同數(shù)量的數(shù)據(jù),通過(guò)hive和impala兩種客戶(hù)端查詢(xún)進(jìn)行比較。 本文前提:熟悉hadoop、hive和impala、kafka、flink等,并且其環(huán)境都可正常使用。(在后續(xù)的專(zhuān)欄中都會(huì)將對(duì)應(yīng)的內(nèi)容補(bǔ)全,目前已經(jīng)完成了zookeeper和hadoop的部分。) 本文分為

    2024年02月12日
    瀏覽(24)
  • 使用Python創(chuàng)建faker實(shí)例生成csv大數(shù)據(jù)測(cè)試文件并導(dǎo)入Hive數(shù)倉(cāng)

    使用Python創(chuàng)建faker實(shí)例生成csv大數(shù)據(jù)測(cè)試文件并導(dǎo)入Hive數(shù)倉(cāng)

    這段Python代碼用于生成模擬的個(gè)人信息數(shù)據(jù),并將數(shù)據(jù)保存為CSV文件。 導(dǎo)入必要的模塊: csv :用于處理CSV文件的模塊。 random :用于生成隨機(jī)數(shù)。 faker :用于生成模擬數(shù)據(jù)的庫(kù)。 定義生成數(shù)據(jù)所需的基本信息: file_base_path :生成的CSV文件的基本路徑。 rows_per_file :每個(gè)C

    2024年02月07日
    瀏覽(20)
  • Postman導(dǎo)出json v2/v2.1文件導(dǎo)入YAPI報(bào)錯(cuò):解析數(shù)據(jù)為空

    Postman導(dǎo)出json v2/v2.1文件導(dǎo)入YAPI報(bào)錯(cuò):解析數(shù)據(jù)為空

    實(shí)測(cè)總結(jié):導(dǎo)入Postman Collection v1的JSON file能成功 版本環(huán)境 Postman 版本:8.11.1 YAPI 版本:1.12.0 問(wèn)題解決 如果Postman能直接導(dǎo)出v1的JSON file就不需要繼續(xù)以下步驟; 可惜Postman v8.11.1 當(dāng)前版本不支持導(dǎo)出v1。 需要使用postman-collection-transformer工具進(jìn)行轉(zhuǎn)換v2 - v1 Postman官網(wǎng)版本轉(zhuǎn)換介

    2024年02月07日
    瀏覽(46)
  • 利用python將json格式的文件導(dǎo)入neo4j圖數(shù)據(jù)庫(kù)

    筆者收到了朋友的求助,希望我寫(xiě)一段python代碼將含對(duì)用關(guān)系的json文件導(dǎo)入neo4j圖數(shù)據(jù)庫(kù)。json的格式如下: 他說(shuō)數(shù)據(jù)量有幾十萬(wàn)條,而且對(duì)應(yīng)關(guān)系不唯一:但可以保證每條都含有名稱(chēng)和治療,但是可能有若干條其他的對(duì)用關(guān)系,例如上文的例子:其既包含之前的三個(gè)模塊,

    2024年02月16日
    瀏覽(28)
  • Flink之FileSink將數(shù)據(jù)寫(xiě)入parquet文件

    Flink之FileSink將數(shù)據(jù)寫(xiě)入parquet文件

    在使用FileSink將數(shù)據(jù)寫(xiě)入列式存儲(chǔ)文件中時(shí)必須使用 forBulkFormat ,列式存儲(chǔ)文件如 ORCFile 、 ParquetFile ,這里就以 ParquetFile 為例結(jié)合代碼進(jìn)行說(shuō)明. 在Flink 1.15.3 中是通過(guò)構(gòu)造 ParquetWriterFactory 然后調(diào)用 forBulkFormat 方法將構(gòu)造好的 ParquetWriterFactory 傳入,這里先講一下構(gòu)造 ParquetWriterF

    2024年02月03日
    瀏覽(18)
  • 用sqoop導(dǎo)出hive parquet 分區(qū)表到mysql

    確保你已經(jīng)安裝并配置好了Sqoop工具,并且可以連接到Hadoop集群和MySQL數(shù)據(jù)庫(kù)。 創(chuàng)建一個(gè)MySQL表來(lái)存儲(chǔ)導(dǎo)出的數(shù)據(jù)。請(qǐng)確保MySQL表的結(jié)構(gòu)與Hive Parquet分區(qū)表的結(jié)構(gòu)匹配。 使用Sqoop的export命令來(lái)執(zhí)行導(dǎo)出操作。以下是一個(gè)示例命令: 替換 mysql_host、database_name、mysql_username 和 mysq

    2024年02月14日
    瀏覽(18)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包