色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

支持的JSON數據選項介紹

jf_pJlTbmA9 ? 來源:NVIDIA ? 作者:NVIDIA ? 2023-07-05 16:30 ? 次閱讀

JSON 是一種廣泛采用的基于文本的信息格式,可在系統之間互操作,最常見于 web 應用程序。雖然 JSON 格式是人類可讀的,但使用數據科學和數據工程工具處理它很復雜。

為了彌補這一差距, RAPIDS cuDF 提供了一個 GPU 加速的 JSON 讀取器( cudf.read_json ),該讀取器對于許多 JSON 數據結構都是高效和健壯的。 JSON format 指定了一種通用的樹狀數據結構, cuDF 實現了算法,可以輕松地將 JSON 樹轉換為柱狀數據。

cuDF 是一個 GPU DataFrame 庫,用于在 Python 中加載、連接、聚合、過濾和以其他方式操作數據。當 JSON 數據被構造為柱狀數據時,它可以訪問強大的 cuDF DataFrame API 。我們很高興能夠通過本讀者打開 GPU 加速到更多數據格式、項目和建模工作流的可能性。

本文重點介紹了支持的 JSON 數據選項:面向記錄的 JSON 和 JSON 行。以下是幾個 cuDF 讀取器選項的示例,用于處理具有字節范圍或多個源的 JSON 行文件。最后,您將學習如何使用 cuDF 中的工具來展平 cuDF 中的列表和結構類型,以及如何應用這些工具從常見的 JSON 模式組裝 DataFrame 。

在 cuDF 中讀取 JSON 數據

默認情況下, cuDF JSON 讀取器需要使用 records 方向的輸入數據。面向記錄的 JSON 數據由根級別的對象數組組成,數組中的每個對象對應一行。對象中的字段名決定表的列名。

JSON 數據的另一個常見變體是 JSON 行,其中 JSON 對象由換行符(n)分隔,每個對象對應一行。

以下代碼示例顯示了面向記錄的 JSON 以及 JSON 行數據:

>>> j = '''[
... {"a": "v1", "b": 12},
... {"a": "v2", "b": 7},
... {"a": "v3", "b": 5}
... ]'''
>>> df_records = cudf.read_json(j)

>>> j = 'n'.join([
...     '{"a": "v1", "b": 12}',
...     '{"a": "v2", "b": 7}',
...     '{"a": "v3", "b": 5}'
... ])
>>> df_lines = cudf.read_json(j, lines=True)

>>> df_lines
    a   b
0  v1  12
1  v2   7
2  v3   5
>>> df_records.equals(df_lines)
True

cuDF JSON 讀取器還與嵌套的 JSON 對象和數組兼容,這些對象和數組大致映射到結構和列表 data types in cuDF 。

以下示例演示了用于生成列表和結構列以及數據類型為列表和結構的任意組合的列的輸入和輸出。

# example with columns types:
# list and struct
>>> j = '''[
... {"list": [0, 1, 2], "struct": {"k": "v1"}}, 
... {"list": [3, 4, 5], "struct": {"k": "v2"}}
... ]'''
>>> df = cudf.read_json(j)
>>> df
        list       struct
0  [0, 1, 2]  {'k': 'v1'}
1  [3, 4, 5]  {'k': 'v2'}

# example with columns types: 
# list> and struct, m:int>
>>> j = 'n'.join([
...     '{"a": [{"k": 0}], "b": {"k": [0, 1], "m": 5}}',
...     '{"a": [{"k": 1}, {"k": 2}], "b": {"k": [2, 3], "m": 6}}',
... ])
>>> df = cudf.read_json(j, lines=True)
>>> df
                      a                      b
0            [{'k': 0}]  {'k': [0, 1], 'm': 5}
1  [{'k': 1}, {'k': 2}]  {'k': [2, 3], 'm': 6}

處理大小 JSON 行文件

對于基于 JSON Lines 數據的工作負載, cuDF 包括幫助數據處理的讀取器選項:大文件的字節范圍支持和小文件的多源支持。

字節范圍支持

一些工作流,如欺詐檢測和用戶行為建模,需要處理可能超過 GPU 內存容量的大型 JSON Line 文件。

cuDF 中的 JSON 讀取器支持字節范圍參數,該參數指定起始字節偏移量和字節大小。讀取器解析在字節范圍內開始的每個記錄,因此,字節范圍不必與記錄邊界對齊。

在分布式工作流中,字節范圍使每個工作人員能夠處理數據的子集。在過濾和聚合中,字節范圍允許單個工作人員以塊的形式處理數據。

為了避免跳過行或讀取重復的行,字節范圍應該相鄰,如下例所示。

>>> num_rows = 10
>>> j = 'n'.join([
...     '{"id":%s, "distance": %s, "unit": "m/s"}' % x 
...     for x in zip(range(num_rows), cupy.random.rand(num_rows))
... ])
>>> chunk_count = 4
>>> chunk_size = len(j) // chunk_count + 1
>>> data = []
>>> for x in range(chunk_count):
...     d = cudf.read_json(
...         j,        
...         lines=True, 
...         byte_range=(chunk_size * x, chunk_size)
...     )
...     data.append(d)    
>>> df = cudf.concat(data)

多源支持

相比之下,一些工作流需要處理許多小的 JSON 行文件。

cuDF 中的 JSON 讀取器接受數據源列表,而不是循環通過源并連接生成的 DataFrame 。然后將原始輸入作為單個源進行有效處理。

cuDF 中的 JSON 讀取器接受源作為文件路徑、原始字符串或類似文件的對象,以及這些源的列表。

>>> j1 = '{"id":0}n{"id":1}n'
>>> j2 = '{"id":2}n{"id":3}n'
>>> df = cudf.read_json([j1, j2], lines=True)

解包列表和結構數據

將 JSON 數據讀入帶有列表和結構列類型的 cuDF DataFrame 后,許多工作流的下一步是將數據提取或展平為簡單類型。

對于結構列,一種解決方案是使用struct.explode訪問器提取數據,并將結果連接到父 DataFrame 。

下面的代碼示例演示如何從結構列中提取數據。

>>> j = 'n'.join([
...     '{"x": "Tokyo", "y": {"country": "Japan", "iso2": "JP"}}',
...     '{"x": "Jakarta", "y": {"country": "Indonesia", "iso2": "ID"}}',
...     '{"x": "Shanghai", "y": {"country": "China", "iso2": "CN"}}'
... ])
>>> df = cudf.read_json(j, lines=True)
>>> df = df.drop(columns='y').join(df['y'].struct.explode())
>>> df
          x    country iso2
0     Tokyo      Japan   JP
1   Jakarta  Indonesia   ID
2  Shanghai      China   CN

對于元素順序有意義的列表列,list.get訪問器從特定位置提取元素。然后,可以將生成的cudf.Series對象分配給 DataFrame 中的新列。

下面的代碼示例演示如何從列表列中提取第一個和第二個元素。

>>> j = 'n'.join([
...     '{"name": "Peabody, MA", "coord": [42.53, -70.98]}',
...     '{"name": "Northampton, MA", "coord": [42.32, -72.66]}',
...     '{"name": "New Bedford, MA", "coord": [41.63, -70.93]}'
... ])
>>> df = cudf.read_json(j, lines=True)
>>> df['latitude'] = df['coord'].list.get(0)
>>> df['longitude'] = df['coord'].list.get(1)
>>> df = df.drop(columns='coord')
>>> df
              name  latitude  longitude
0      Peabody, MA     42.53     -70.98
1  Northampton, MA     42.32     -72.66
2  New Bedford, MA     41.63     -70.93

最后,對于長度可變的列表列,explode方法將創建一個新的 DataFrame ,每個列表元素作為一行。將分解的 DataFrame 連接到父 DataFrame 上會產生一個具有所有簡單類型的輸出。

以下示例展平列表列,并將其連接到父 DataFrame 中的索引和其他數據。

>>> j = 'n'.join([
...     '{"product": "socks", "ratings": [2, 3, 4]}',
...     '{"product": "shoes", "ratings": [5, 4, 5, 3]}',
...     '{"product": "shirts", "ratings": [3, 4]}'
... ])
>>> df = cudf.read_json(j, lines=True)
>>> df = df.drop(columns='ratings').join(df['ratings'].explode())
>>> df
  product  ratings
0   socks        2
0   socks        4
0   socks        3
1   shoes        5
1   shoes        5
1   shoes        4
1   shoes        3
2  shirts        3
2  shirts        4

使用 cuDF 構建 JSON 數據解決方案

有時,工作流必須使用對象根處理 JSON 數據。 cuDF 提供了為此類數據構建解決方案的工具。要使用對象根處理 JSON 數據,我們建議將數據作為單個 JSON 行讀取,然后拆包生成的 DataFrame 。

以下示例將 JSON 對象作為單行讀取,然后將“ results ”字段提取到新的 DataFrame 中。

>>> j = '''{
...     "metadata" : {"vehicle":"car"},
...     "results": [
...         {"id": 0, "distance": 1.2},
...         {"id": 1, "distance": 2.4},
...         {"id": 2, "distance": 1.7}
...     ]
... }'''

# first read the JSON object with lines=True
>>> df = cudf.read_json(j, lines=True)
>>> df
             metadata                                            records
0  {'vehicle': 'car'}  [{'id': 0, 'distance': 1.2}, {'id': 1, 'distan...

# then explode the 'records' column 
>>> df = df['records'].explode().struct.explode()
>>> df
   id  distance
0   0       1.2
1   1       2.4
2   2       1.7

關鍵要點

cuDF JSON 讀取器旨在加速廣泛的 JSON 數據工作負載,包括跨大文件和小文件的簡單和復雜類型。

這篇文章演示了 cuDF JSON 讀取器與面向記錄和 JSON 行數據的常見用法,以及展示字節范圍和多源支持。現在,您可以加快處理 JSON 數據的方式,并將 JSON 數據有效地結合到工作流中。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • NVIDIA
    +關注

    關注

    14

    文章

    5075

    瀏覽量

    103561
  • gpu
    gpu
    +關注

    關注

    28

    文章

    4768

    瀏覽量

    129245
  • AI
    AI
    +關注

    關注

    87

    文章

    31491

    瀏覽量

    270004
收藏 人收藏

    評論

    相關推薦

    JSON 數據格式

    本帖最后由 windworld 于 2016-3-30 14:48 編輯 JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。JSON采用完全獨立
    發表于 03-30 14:48

    怎么支持PIC32中的JSON解析和序列化

    我正在尋找支持或庫,允許我將JSON對象序列化為char數組,并將char數組/字符串解析為JSON對象。我查看了JSMN庫,但它看起來只是解析,而不是序列化。我目前在ARDUINO板上
    發表于 11-28 16:46

    Django怎么輸出Json數據

    Django如何輸出Json數據
    發表于 05-27 14:06

    json數據解析

    json解析,上篇已經GET到了天氣狀況,是json數據,解析一下看api先是構造json再是解析json
    發表于 01-12 08:15

    android使用JSON進行網絡數據交換

    本文將快速講解 JSON 格式,并通過代碼示例演示如何分別在客戶端和服務器端進行 JSON 格式數據的處理。 什么是JSON
    發表于 12-04 11:51 ?0次下載

    java生成json格式數據 和 java遍歷json格式數據

    本文檔內容介紹了基于java生成json格式數據 和 java遍歷json格式數據,供參考
    發表于 03-19 15:04 ?0次下載

    PHP如何返回json格式的數據給jquery的詳細資料說明

     json格式的數據是我們在應用開發中一直會使用到的數據,如與jquery打交到或與API打交都會使用到json數據,那么PHP如何返回
    發表于 03-22 15:24 ?7次下載
    PHP如何返回<b class='flag-5'>json</b>格式的<b class='flag-5'>數據</b>給jquery的詳細資料說明

    面向NoSQL數據庫的JSON文檔異常檢測模型

    數據庫常用的數據存儲格式,JSON因簡單性和靈活性備受歡迎。然而,NoSαL數據庫缺乏模弌信息,在JSON文檔存入
    發表于 04-13 15:30 ?20次下載
    面向NoSQL<b class='flag-5'>數據</b>庫的<b class='flag-5'>JSON</b>文檔異常檢測模型

    什么是JSON劫持 JSON和XML的區別

    什么是JSON劫持 單從字面上就可以理解的出來,JSON是一種輕量級的數據交換格式,而劫持就是對數據進行竊取(或者應該稱為打劫、攔截比較合適。惡意攻擊者通過某些特定的手段,將本應該返回
    的頭像 發表于 08-05 10:09 ?1573次閱讀

    什么是JSON JSON的語法規則

    JSON數據交換格式 JSON(JavaScript Object Notation, JS 對象簡譜) 是一種輕量級的數據交換格式。它基于 ECMAScript (歐洲計算機協會制定
    的頭像 發表于 08-25 15:40 ?2684次閱讀

    645儀表以JSON格式上發方法

    之前我們已經介紹了Modbus RTU儀表實現JSON格式上發云服務器的方法,類似的現在也可以支持645協議的儀表通過JSON格式上發服務器。
    的頭像 發表于 12-02 14:11 ?940次閱讀
    645儀表以<b class='flag-5'>JSON</b>格式上發方法

    怎么用C+JS結構來處理JSON數據

    在物聯網產品的開發過程中,對JSON格式的數據處理是一個強需求,例如亞馬遜的 AWS IOT平臺,設備與后臺之間的通訊數據都是JSON格式,
    的頭像 發表于 02-14 13:46 ?811次閱讀
    怎么用C+JS結構來處理<b class='flag-5'>JSON</b><b class='flag-5'>數據</b>?

    如何利用Python和pandas來處理json數據

    在實際工作中,尤其是web數據的傳輸,我們經常會遇到json數據。它不像常見的文本數據、數值數據那樣友好,而且它和Python中的字典類型
    的頭像 發表于 11-01 10:59 ?2497次閱讀
    如何利用Python和pandas來處理<b class='flag-5'>json</b><b class='flag-5'>數據</b>

    什么是JSON數據

    如何理解JSON數據庫?作為NoSQL數據庫的一種類型,JSON數據庫有哪些優勢呢?JSON
    的頭像 發表于 12-02 08:04 ?903次閱讀
    什么是<b class='flag-5'>JSON</b><b class='flag-5'>數據</b>庫

    關于JSON數據

    如何理解JSON數據庫?作為NoSQL數據庫的一種類型,JSON數據庫有哪些優勢呢?JSON
    的頭像 發表于 12-06 13:46 ?914次閱讀
    關于<b class='flag-5'>JSON</b><b class='flag-5'>數據</b>庫
    主站蜘蛛池模板: 91精品婷婷国产综合久久8 | 最新国产精品视频免费看 | 快播dvd吧| 欧美久久无码AV麻豆 | 久久久无码AV精品亚洲A片软件 | 色人格影院第四色 | 精品久久久99大香线蕉 | 国产免费阿v精品视频网址 国产免费69成人精品视频 | 亚洲乱妇88网 | 久久免费国产 | 亚洲中文字幕乱倫在线 | 欧美巨大xxxx做受孕妇视频 | s8sp视频高清在线播放 | 国产亚洲精品久久久999无毒 | 丰满艳妇亲伦 | 在线观看视频一区 | 一道精品视频一区二区三区 | WWW国产精品内射熟女 | 极品美女穴 | 国内国外精品影片无人区 | 果冻传媒视频在线观看完整版免费 | 最近的2019中文字幕国语HD | 99视频精品国产在线视频 | 亚洲伊人成综合人影院 | 无码成A毛片免费 | 国产爱豆果冻传媒在线观看 | 秋霞电影院午夜伦高清 | jiapanese50欧美熟妇| 黄色大片aa| 日本一卡二卡三卡四卡无卡免费播放 | 538在线视频一区二区视视频 | 学生小泬无遮挡女HD | 99热精品在线av播放 | 国产精品自产拍在线观看网站 | 99国产热视频在线观看 | 偷拍自怕亚洲在线第7页 | 亚洲国产成人久久一区www妖精 | 成年人视频免费在线观看 | 日本特殊精油按摩 | 亚洲欧洲日产国码久在线 | 欧美激情性AAAAA片欧美 |