欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

用 Python 定義 Schema 并生成 Parquet 文件詳情

 更新時(shí)間:2021年09月25日 10:19:40   作者:Yanbin Blog  
本文將演示兩個(gè)例子,一個(gè)是沒有層級(jí)的兩個(gè)字段,另一個(gè)是含于嵌套級(jí)別的字段,將要使用到的 Python 模塊有 pandas 和 pyarrow,感興趣是我小伙伴請(qǐng)和小編一起學(xué)習(xí)下面文章內(nèi)容吧

Java Python 實(shí)現(xiàn) Avro 轉(zhuǎn)換成 Parquet 格式, chema 都是在 Avro 中定義的。這里要嘗試的是如何定義 Parquet Schema, 然后據(jù)此填充數(shù)據(jù)并生成 Parquet 文件。

一、簡(jiǎn)單字段定義

1、定義 Schema 并生成 Parquet 文件

import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq

# 定義 Schema
schema = pa.schema([
    ('id', pa.int32()),
    ('email', pa.string())
])

# 準(zhǔn)備數(shù)據(jù)
ids = pa.array([1, 2], type = pa.int32())
emails = pa.array(['first@example.com', 'second@example.com'], pa.string())

# 生成 Parquet 數(shù)據(jù)
batch = pa.RecordBatch.from_arrays(
    [ids, emails],
    schema = schema
)
table = pa.Table.from_batches([batch])

# 寫 Parquet 文件 plain.parquet
pq.write_table(table, 'plain.parquet')
import pandas as pd

import pyarrow as pa

import pyarrow . parquet as pq

# 定義 Schema

schema = pa . schema ( [

     ( 'id' , pa . int32 ( ) ) ,

     ( 'email' , pa . string ( ) )

] )

# 準(zhǔn)備數(shù)據(jù)

ids = pa . array ( [ 1 , 2 ] , type = pa . int32 ( ) )

emails = pa . array ( [ 'first@example.com' , 'second@example.com' ] , pa . string ( ) )

# 生成 Parquet 數(shù)據(jù)

batch = pa . RecordBatch . from_arrays (

     [ ids , emails ] ,

     schema = schema

)

table = pa . Table . from_batches ( [ batch ] )

# 寫 Parquet 文件 plain.parquet

pq . write_table ( table , 'plain.parquet' )

2、驗(yàn)證 Parquet 數(shù)據(jù)文件

我們可以用工具 parquet-tools 來(lái)查看 plain.parquet 文件的數(shù)據(jù)和 Schema

 $ parquet-tools schema plain.parquet  message schema {      optional int32 id;      optional binary email (STRING);  }  $ parquet-tools cat --json plain.parquet  {"id":1,"email":"first@example.com"}  {"id":2,"email":"second@example.com"} 


沒問題,與我們期望的一致。也可以用 pyarrow 代碼來(lái)獲取其中的 Schema 和數(shù)據(jù)

schema = pq.read_schema('plain.parquet')
print(schema)

df = pd.read_parquet('plain.parquet')
print(df.to_json())
schema = pq . read_schema ( 'plain.parquet' )

print ( schema )

df = pd . read_parquet ( 'plain.parquet' )

print ( df . to_json ( ) )

輸出為:

schema = pq.read_schema('plain.parquet')
print(schema)

df = pd.read_parquet('plain.parquet')
print(df.to_json())
schema = pq . read_schema ( 'plain.parquet' )

print ( schema )

df = pd . read_parquet ( 'plain.parquet' )

print ( df . to_json ( ) )

二、含嵌套字段定義

下面的 Schema 定義加入一個(gè)嵌套對(duì)象,在 address 下分 email_address post_address,Schema 定義及生成 Parquet 文件的代碼如下

import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq

# 內(nèi)部字段
address_fields = [
    ('email_address', pa.string()),
    ('post_address', pa.string()),
]

# 定義 Parquet Schema,address 嵌套了 address_fields
schema = pa.schema(j)

# 準(zhǔn)備數(shù)據(jù)
ids = pa.array([1, 2], type = pa.int32())
addresses = pa.array(
    [('first@example.com', 'city1'), ('second@example.com', 'city2')],
    pa.struct(address_fields)
)

# 生成 Parquet 數(shù)據(jù)
batch = pa.RecordBatch.from_arrays(
    [ids, addresses],
    schema = schema
)
table = pa.Table.from_batches([batch])

# 寫 Parquet 數(shù)據(jù)到文件
pq.write_table(table, 'nested.parquet')
import pandas as pd

import pyarrow as pa

import pyarrow . parquet as pq

# 內(nèi)部字段

address_fields = [

     ( 'email_address' , pa . string ( ) ) ,

     ( 'post_address' , pa . string ( ) ) ,

]

# 定義 Parquet Schema,address 嵌套了 address_fields

schema = pa . schema ( j )

# 準(zhǔn)備數(shù)據(jù)

ids = pa . array ( [ 1 , 2 ] , type = pa . int32 ( ) )

addresses = pa . array (

     [ ( 'first@example.com' , 'city1' ) , ( 'second@example.com' , 'city2' ) ] ,

     pa . struct ( address_fields )

)

# 生成 Parquet 數(shù)據(jù)

batch = pa . RecordBatch . from_arrays (

     [ ids , addresses ] ,

     schema = schema

)

table = pa . Table . from_batches ( [ batch ] )

# 寫 Parquet 數(shù)據(jù)到文件

pq . write_table ( table , 'nested.parquet' )

1、驗(yàn)證 Parquet 數(shù)據(jù)文件

同樣用 parquet-tools 來(lái)查看下 nested.parquet 文件

 $ parquet-tools schema nested.parquet  message schema {      optional int32 id;      optional group address {          optional binary email_address (STRING);          optional binary post_address (STRING);      }  }  $ parquet-tools cat --json nested.parquet  {"id":1,"address":{"email_address":"first@example.com","post_address":"city1"}}  {"id":2,"address":{"email_address":"second@example.com","post_address":"city2"}} 


parquet-tools 看到的 Schama 并沒有 struct 的字樣,但體現(xiàn)了它 address 與下級(jí)屬性的嵌套關(guān)系。

pyarrow 代碼來(lái)讀取 nested.parquet 文件的 Schema 和數(shù)據(jù)是什么樣子

schema = pq.read_schema("nested.parquet")
print(schema)

df = pd.read_parquet('nested.parquet')
print(df.to_json())
schema = pq . read_schema ( "nested.parquet" )

print ( schema )

df = pd . read_parquet ( 'nested.parquet' )

print ( df . to_json ( ) )

輸出:

id: int32
  -- field metadata --
  PARQUET:field_id: '1'
address: struct<email_address: string, post_address: string>
  child 0, email_address: string
    -- field metadata --
    PARQUET:field_id: '3'
  child 1, post_address: string
    -- field metadata --
    PARQUET:field_id: '4'
  -- field metadata --
  PARQUET:field_id: '2'
{"id":{"0":1,"1":2},"address":{"0":{"email_address":"first@example.com","post_address":"city1"},"1":{"email_address":"second@example.com","post_address":"city2"}}}
id : int32

   -- field metadata --

   PARQUET : field_id : '1'

address : struct & lt ; email_address : string , post_address : string & gt ;

   child 0 , email_address : string

     -- field metadata --

     PARQUET : field_id : '3'

   child 1 , post_address : string

     -- field metadata --

     PARQUET : field_id : '4'

   -- field metadata --

   PARQUET : field_id : '2'

{ "id" : { "0" : 1 , "1" : 2 } , "address" : { "0" : { "email_address" : "first@example.com" , "post_address" : "city1" } , "1" : { "email_address" : "second@example.com" , "post_address" : "city2" } } }

數(shù)據(jù)當(dāng)然是一樣的,有略微不同的是顯示的 Schema 中, address 標(biāo)識(shí)為 struct<email_address: string, post_address: string> , 明確的表明它是一個(gè) struct 類型,而不是只展示嵌套層次。

到此這篇關(guān)于用 Python 定義 Schema 并生成 Parquet 文件詳情的文章就介紹到這了,更多相關(guān)用 Python 定義 Schema 并生成 Parquet 文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中執(zhí)行分位數(shù)回歸的示例詳解

    Python中執(zhí)行分位數(shù)回歸的示例詳解

    分位數(shù)回歸是線性回歸的擴(kuò)展版本,分位數(shù)回歸構(gòu)建一組變量(也稱為自變量)和分位數(shù)(也稱為因變量)之間的關(guān)系,下面我們就來(lái)看看Python如何執(zhí)行分位數(shù)回歸吧
    2024-03-03
  • python實(shí)現(xiàn)三階魔方還原的示例代碼

    python實(shí)現(xiàn)三階魔方還原的示例代碼

    這篇文章主要介紹了python實(shí)現(xiàn)三階魔方還原的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • python發(fā)送arp欺騙攻擊代碼分析

    python發(fā)送arp欺騙攻擊代碼分析

    這篇文章主要介紹了python發(fā)送arp欺騙攻擊的方法,大家碰到這樣的事情可以預(yù)防一下
    2014-01-01
  • python字典鍵值對(duì)的添加和遍歷方法

    python字典鍵值對(duì)的添加和遍歷方法

    下面小編就為大家?guī)?lái)一篇python字典鍵值對(duì)的添加和遍歷方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2016-09-09
  • 將 Ubuntu 16 和 18 上的 python 升級(jí)到最新 python3.8 的方法教程

    將 Ubuntu 16 和 18 上的 python 升級(jí)到最新 python3.8 的方法教程

    這篇文章主要介紹了如何將 Ubuntu 16 和 18 上的 python 升級(jí)到最新 3.8 版,本文通過實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Python使用pyecharts繪制世界地圖,省級(jí)地圖,城市地圖實(shí)例詳解

    Python使用pyecharts繪制世界地圖,省級(jí)地圖,城市地圖實(shí)例詳解

    這篇文章主要介紹了如何使用Python中的pyecharts庫(kù)繪制世界地圖、中國(guó)地圖、省級(jí)地圖、市級(jí)地圖,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起動(dòng)手試一試
    2022-02-02
  • python獲取外網(wǎng)ip地址的方法總結(jié)

    python獲取外網(wǎng)ip地址的方法總結(jié)

    這篇文章主要介紹了python獲取外網(wǎng)ip地址的方法,實(shí)例總結(jié)了四種常用的獲取外網(wǎng)IP地址的技巧,需要的朋友可以參考下
    2015-07-07
  • python實(shí)現(xiàn)微秒級(jí)等待問題(windows)

    python實(shí)現(xiàn)微秒級(jí)等待問題(windows)

    這篇文章主要介紹了python實(shí)現(xiàn)微秒級(jí)等待問題(windows),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Python變量基礎(chǔ)知識(shí)

    Python變量基礎(chǔ)知識(shí)

    這篇文章主要介紹Python變量的基礎(chǔ)知識(shí),圍繞Python變量相關(guān)知識(shí)點(diǎn)展開,需要的朋友可以參考下面文章的具體內(nèi)容
    2021-10-10
  • Python Merge函數(shù)原理及用法解析

    Python Merge函數(shù)原理及用法解析

    這篇文章主要介紹了Python Merge函數(shù)原理及用法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09

最新評(píng)論