【问题标题】:Reading Arrow Feather files in GoLang or Javascript在 GoLang 或 Javascript 中读取 Arrow Feather 文件
【发布时间】:2021-07-19 10:54:30
【问题描述】:

我正在寻找一种通过 GoLang 或 Javascript 或其他一些不需要用户进行其他额外安装的语言来读取羽毛文件的方法。

我的目标是提供一个用户界面来读取羽毛 csv 文件并将其转换回人类可读的 csv。但是我找不到太多关于如何解决的资源。

目前我有一个由下面生成的测试羽毛文件。

import pandas as pd
import datetime
import numpy as np
import pyarrow.feather as feather

# Create a dummy dataframe
todays_date = datetime.datetime.now().date()
index = pd.date_range(todays_date-datetime.timedelta(10), periods=10, freq='D')

columns = ['A','B', 'C']
df = pd.DataFrame(index=index, columns=columns)
df = df.fillna(0) # with 0s rather than NaNs

feather.write_feather(df, 'test_feather.csv')

提前致谢。

【问题讨论】:

    标签: javascript python go apache-arrow feather


    【解决方案1】:

    Javascript 包apache-arrow 附带了一个执行此操作的脚本。你可以在这里找到脚本的来源:https://github.com/apache/arrow/blob/master/js/bin/arrow2csv.js

    如果它没有完全按照您的要求执行,则该脚本应作为如何使用 API 读取羽毛文件的示例。

    【讨论】:

      【解决方案2】:

      感谢@Pace 的提示。结果我发现我可以简单地使用arrow.Table.from([arrow]) 函数将.feather 文件转换为csv。 对于遇到同样问题的人,您可以找到下面的代码以供参考。

      const apArrow = require('apache-arrow');
      const fs = require('fs');
      
      const outputDir = 'output/feather';
      
      const writeIntoFile = (data) => {
        fs.appendFileSync(`${outputDir}/test_feather.csv`, data, function (err) {
          if (err) return console.log(err);
        });
      };
      
      const readDataFromRow = (fields, row) => {
        return fields
          .map((f) => row.get(f))
          .join(',');
      };
      
      const arrowReader = (filePath) => {
        console.log('filePath', filePath);
        const arrow = fs.readFileSync(filePath);
        const table = apArrow.Table.from([arrow]);
      
        const columns = table.schema.fields.map((f) => f.name);
      
        let buf = columns.join(',') + '\n';
      
        for (let i = 0; i < table.count(); i++) {
          const rowData = readDataFromRow(columns, table.get(i));
          buf += `${rowData}\n`;
          // export to csv every 10000 rows
          if (i % 10000 === 0) {
            writeIntoFile(buf);
            buf = '';
            if (i > 0) {
              break;
            }
          }
        }
      
        writeIntoFile(buf);
      };
      

      【讨论】:

        猜你喜欢
        • 2020-02-24
        • 2021-06-09
        • 2021-08-26
        • 2020-01-01
        • 2022-01-26
        • 2020-09-14
        • 2016-10-24
        • 2017-03-04
        • 2018-08-22
        相关资源
        最近更新 更多