在 GoLang 或 Javascript 中读取 Arrow Feather 文件

问题描述

我正在寻找一种通过 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);
};

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...