标签: pyarrow

使用 pyarrow 时无法加载 libhdfs

我正在尝试通过 Pyarrow 连接到 HDFS,但它不起作用,因为libhdfs无法加载库。

libhdfs.so既在 又$HADOOP_HOME/lib/native$ARROW_LIBHDFS_DIR

print(os.environ['ARROW_LIBHDFS_DIR'])
fs = hdfs.connect()


bash-3.2$ ls $ARROW_LIBHDFS_DIR
examples        libhadoop.so.1.0.0  libhdfs.a       libnativetask.a
libhadoop.a     libhadooppipes.a    libhdfs.so      libnativetask.so
libhadoop.so        libhadooputils.a    libhdfs.so.0.0.0    libnativetask.so.1.0.0
Run Code Online (Sandbox Code Playgroud)

我得到的错误:

Traceback (most recent call last):
  File "wine-pred-ml.py", line 31, in <module>
    fs = hdfs.connect()
  File "/Users/PVZP/Library/Python/2.7/lib/python/site-packages/pyarrow/hdfs.py", line 183, in connect
    extra_conf=extra_conf)
  File "/Users/PVZP/Library/Python/2.7/lib/python/site-packages/pyarrow/hdfs.py", line 37, in __init__
    self._connect(host, port, user, kerb_ticket, driver, extra_conf)
  File "pyarrow/io-hdfs.pxi", line 89, in pyarrow.lib.HadoopFileSystem._connect
  File "pyarrow/error.pxi", line 83, in pyarrow.lib.check_status
pyarrow.lib.ArrowIOError: Unable …
Run Code Online (Sandbox Code Playgroud)

python hadoop hdfs apache-arrow pyarrow

9
推荐指数
1
解决办法
7528
查看次数

我可以存储带有值混合类型的字典列的 Parquet 文件吗?

我正在尝试将 Python Pandas DataFrame 存储为 Parquet 文件,但遇到了一些问题。我的 Pandas DF 的一列包含这样的字典:

import pandas as pandas

df = pd.DataFrame({
    "ColA": [1, 2, 3],
    "ColB": ["X", "Y", "Z"],
    "ColC": [
        { "Field": "Value" },
        { "Field": "Value2" },
        { "Field": "Value3" }
    ]
})

df.to_parquet("test.parquet")
Run Code Online (Sandbox Code Playgroud)

现在,这工作得很好,问题是当字典的嵌套值之一具有与其他值不同的类型时。例如:

import pandas as pandas

df = pd.DataFrame({
    "ColA": [1, 2, 3],
    "ColB": ["X", "Y", "Z"],
    "ColC": [
        { "Field": "Value" },
        { "Field": "Value2" },
        { "Field": ["Value3"] }
    ]
})

df.to_parquet("test.parquet")
Run Code Online (Sandbox Code Playgroud)

这会引发以下错误:

ArrowInvalid: ('cannot mix list …

python dataframe pandas parquet pyarrow

9
推荐指数
1
解决办法
2万
查看次数

导入 pyarrow 不起作用 &lt;- 错误是“ValueError:未安装 pyarrow 库,请安装 pyarrow 以使用 to_arrow() 函数。”

我尝试在终端和 juypter 实验室中安装它,它说它已成功安装,但是当我运行 df = query_job.to_dataframe() 时,我不断收到错误“ ValueError: The pyarrow library is not installed, please install pyarrow使用 to_arrow() 函数。”。我不知道如何解决这个问题。有什么建议吗?我试图最终使用代码从谷歌数据工作室访问数据,

from google.cloud import bigquery
import pandas
import numpy
import pyarrow
bigquery_client = bigquery.Client()
import os 
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] ='full file path here.json'
QUERY = """
SELECT * 
FROM `warehouse`
LIMIT 100
"""
query_job = bigquery_client.query(QUERY)
df = query_job.to_dataframe()
Run Code Online (Sandbox Code Playgroud)

google-bigquery jupyter pyarrow

9
推荐指数
2
解决办法
6530
查看次数

将带有 timedeltas 的 Pandas 数据帧写入镶木地板

我似乎无法通过 pyarrow 将包含 timedeltas 的 Pandas 数据帧写入镶木地板文件。

该pyarrow文档指定它可以处理numpy的timedeltas64ms精确度。但是,当我从 numpy 构建数据框时timedelta64[ms],该列的数据类型是timedelta64[ns].

Pyarrow 然后因此引发错误。

这是熊猫或pyarrow中的错误吗?有没有简单的解决方法?

以下代码:

df = pd.DataFrame({
    'timedelta': np.arange(start=0, stop=1000,
        step=10,
         dtype='timedelta64[ms]')
})

print(df.timedelta.dtypes)

df.to_parquet('test.parquet', engine='pyarrow', compression='gzip')
Run Code Online (Sandbox Code Playgroud)

产生以下输出:timedelta64[ns]和错误:

---------------------------------------------------------------------------
ArrowNotImplementedError                  Traceback (most recent call last)
<ipython-input-41-7df28b306c1e> in <module>()
      3                                    step=10,
      4                                    dtype='timedelta64[ms]')
----> 5             }).to_parquet('test.parquet', engine='pyarrow', compression='gzip')

~/miniconda3/envs/myenv/lib/python3.6/site-packages/pandas/core/frame.py in to_parquet(self, fname, engine, compression, **kwargs)
   1940         from pandas.io.parquet import to_parquet
   1941         to_parquet(self, fname, engine,
-> 1942                    compression=compression, **kwargs)
   1943 
   1944     @Substitution(header='Write …
Run Code Online (Sandbox Code Playgroud)

python pandas parquet pyarrow

8
推荐指数
1
解决办法
2483
查看次数

如何原生阅读羽毛文件?

我有羽毛格式文件sales.fea,我用它来交换python和R 之间的数据.

在RI中使用以下命令:

df = as.data.frame(feather::read_feather("sales.fea"))
Run Code Online (Sandbox Code Playgroud)

在python我用过:

df = feather.read_dataframe("sales.fea")
Run Code Online (Sandbox Code Playgroud)

将数据从该文件加载到内存到Spark实例的最快/最佳方法是什么pyspark

我不想使用pandas来加载数据,因为它是我的19GB羽毛文件的段错误,由45GB csv创建.

我的想法是,Spark是如此时髦,也是羽毛,我希望有一些更本土化的方式,而不是通过次高效的临时解决方案.

apache-spark pyspark feather pyarrow

8
推荐指数
1
解决办法
891
查看次数

逐行构建pyarrow表的最快方法

我有一个很大的字典,我想遍历它来构建一个 pyarrow 表。字典的值是不同类型的元组,需要解包并存储在最终 pyarrow 表中的单独列中。我确实提前知道架构。键还需要存储为列。我在下面有一种方法可以逐行构建表格 - 还有另一种更快的方法吗?对于上下文,我想将一个大字典解析为一个 pyarrow 表以写出到镶木地板文件中。RAM 使用比 CPU 时间更重要。我不想下降到箭头 C++ API。

import pyarrow as pa
import random
import string 
import time

large_dict = dict()

for i in range(int(1e6)):
    large_dict[i] = (random.randint(0, 5), random.choice(string.ascii_letters))


schema = pa.schema({
        "key"  : pa.uint32(),
        "col1" : pa.uint8(),
        "col2" : pa.string()
   })

start = time.time()

tables = []
for key, item in large_dict.items():
    val1, val2 = item
    tables.append(
            pa.Table.from_pydict({
                    "key"  : [key],
                    "col1" : [val1],
                    "col2" : [val2]
                }, schema = schema)

            ) …
Run Code Online (Sandbox Code Playgroud)

python apache-arrow pyarrow

8
推荐指数
1
解决办法
4451
查看次数

在熊猫数据框中查找嵌套列

我有一个包含许多列(压缩)JSON 格式的大型数据集。我正在尝试将其转换为镶木地板以进行后续处理。某些列具有嵌套结构。现在我想忽略这个结构,只是将这些列作为(JSON)字符串写出来。

所以对于我确定的列,我正在做:

df[column] = df[column].astype(str)
Run Code Online (Sandbox Code Playgroud)

但是,我不确定哪些列是嵌套的,哪些不是。当我用镶木地板书写时,我看到以下消息:

<stack trace redacted> 

  File "pyarrow/_parquet.pyx", line 1375, in pyarrow._parquet.ParquetWriter.write_table
  File "pyarrow/error.pxi", line 78, in pyarrow.lib.check_status
pyarrow.lib.ArrowInvalid: Nested column branch had multiple children: struct<coordinates: list<item: double>, type: string>
Run Code Online (Sandbox Code Playgroud)

这表明我未能将我的一列从嵌套对象转换为字符串。但应该归咎于哪个专栏?我怎么知道?

当我打印.dtypes我的 Pandas 数据框时,我无法区分字符串和嵌套值,因为两者都显示为object.

编辑:该错误通过显示结构详细信息提示了嵌套列,但这非常耗时调试。此外,它只打印第一个错误,如果您有多个嵌套列,这可能会很烦人

python python-3.x pandas pyarrow

8
推荐指数
1
解决办法
2399
查看次数

向 HuggingFace 数据集添加新列

在数据集中,我有 5000000 行,我想在我的数据集中添加一个名为“嵌入”的列。

dataset = dataset.add_column('embeddings', embeddings)

变量embeddings是一个大小为 (5000000, 512) 的 numpy memmap 数组。

但我收到这个错误:

ArrowInvalidTraceback(最近一次调用最后一次)位于 ----> 1 dataset = dataset.add_column('embeddings', embeddings)

/opt/conda/lib/python3.8/site-packages/datasets/arrow_dataset.py inwrapper(*args, **kwargs) 486 } 487 # 应用实际函数 --> 488 out: Union["Dataset", " DatasetDict"] = func(self, *args, **kwargs) 489 数据集: List["Dataset"] = list(out.values()) if isinstance(out, dict) else [out] 490 # 重新应用格式到输出

/opt/conda/lib/python3.8/site-packages/datasets/fingerprint.py inwrapper(*args, **kwargs) 404 # 调用实际函数 405 --> 406 out = func(self, *args, * *kwargs) 407 408 # 更新就地变换的指纹+更新就地变换的历史记录

/opt/conda/lib/python3.8/site-packages/datasets/arrow_dataset.py in add_column(self, name, column, new_fingerprint) …

python numpy word-embedding pyarrow huggingface-datasets

8
推荐指数
1
解决办法
4795
查看次数

ArrowInvalid:GetFileInfo() 生成的路径位于基本目录镶木地板之外

我的 S3 存储桶中存储了一个镶木地板数据集,其中包含多个分区文件。我想将其读入我的 pandas 数据帧,但是当我以前没有这样做时,我收到了这个 ArrowInvalid 错误。

有时,这些数据会被之前的 pandas 数据快照覆盖,如下所示:

import pandas as pd  # version 1.3.4
# pyarrow version 5.0

df.to_parquet(
    f's3a://{bucket_and_prefix}',
    storage_options={
        "key"          : os.getenv("AWS_ACCESS_KEY_ID"),
        "secret"       : os.getenv("AWS_SECRET_ACCESS_KEY"),
        "client_kwargs": {
            'verify'      : os.getenv('AWS_CA_BUNDLE'),
            'endpoint_url': 'https://prd-data.company.com/'
        }
    },
    index=False
)
Run Code Online (Sandbox Code Playgroud)

但是当阅读它时:

df = pd.read_parquet(
    f"s3a://{bucket_and_prefix}",
    storage_options={
        "key"          : os.getenv("AWS_ACCESS_KEY_ID"),
        "secret"       : os.getenv("AWS_SECRET_ACCESS_KEY"),
        "client_kwargs": {
            'verify'      : os.getenv('AWS_CA_BUNDLE'),
            'endpoint_url': 'https://prd-data.company.com/'
        }
    }
)
Run Code Online (Sandbox Code Playgroud)

它失败并出现错误:

ArrowInvalid:GetFileInfo() 产生路径“bucket/folder/data.parquet/year=2021/month=2/abcde.parquet”,位于基本目录“s3://bucket/folder/data.parquet”之外

知道为什么会发生这个 ArrowInvalid 错误以及如何将镶木地板数据读入 pandas 吗?

python pandas parquet pyarrow

8
推荐指数
0
解决办法
4032
查看次数

导入 pandas 库时遇到问题

Pyarrow 将在 pandas 的下一个主要版本(pandas 3.0)中成为 pandas 的必需依赖项

-每次我在 PyCharm 上执行“import pandas as pd”时都会出现此错误

给我解决方案我应该安装或升级什么。

python import pandas pyarrow

8
推荐指数
2
解决办法
2万
查看次数