在 GoLang 或 Javascript 中读取 Arrow Feather 文件

Reading Arrow Feather files in GoLang or Javascript

我正在寻找一种通过 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 软件包 apache-arrow 附带了一个脚本,可以执行此操作。您可以在此处找到脚本的来源:https://github.com/apache/arrow/blob/master/js/bin/arrow2csv.js

如果它不完全符合您的要求,脚本应该作为如何使用 API 读取羽毛文件的示例。

感谢@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);
};