标签: apache-arrow

Apache Arrow Java API文档

我正在寻找Apache Arrow API的有用文档或示例.有人能指出一些有用的资源吗?我只能找到一些博客和JAVA文档(这并没有多说).

根据我的阅读,它是用于快速分析的标准内存柱状数据库.是否可以将数据加载到箭头存储器并进行操作?

java apache-arrow

17
推荐指数
1
解决办法
2649
查看次数

Arrow IPC 与 Feather

Arrow IPC 和 Feather 有什么区别?

Arrow 官方文档说:

版本 2 (V2),默认版本,在磁盘上精确表示为 Arrow IPC 文件格式。V2 文件支持存储所有 Arrow 数据类型以及使用 LZ4 或 ZSTD 进行压缩。V2 首次在 Apache Arrow 0.17.0 中提供。

vaex是 的替代品pandas,它有两种不同的功能,一种用于 Arrow IPC,另一种用于 Feather。Polars是 pandas 的另一个替代品,表明 Arrow IPC 和 Feather 是相同的。

pandas feather apache-arrow vaex

12
推荐指数
1
解决办法
3952
查看次数

在Apache箭头浏览器顶部的SQL?

我有存储在客户端浏览器内存中的数据。例如,假设数据集如下:

"name" (string),     "age" (int32),   "isAdult" (bool)
"Tom"          ,     29               1
"Tom"          ,     14               0
"Dina"         ,     20               1
Run Code Online (Sandbox Code Playgroud)

我想在javascript中对此数据运行非平凡的SQL语句,例如:

SELECT name, GROUP_CONCAT(age ORDER BY age) ages
FROM arrowData a1 JOIN arrowData a2 USING (name)
WHERE a1.isAdult != a2.isAdult
Run Code Online (Sandbox Code Playgroud)

我会得到:

"name" (string),      "ages" (string)
"Tom"                 "14,29"
Run Code Online (Sandbox Code Playgroud)

我在javascript中拥有的数据存储为apache Arrow(也与Perspective结合使用),并且我也想对该apache Arrow数据执行SQL。作为最后的选择,我认为可以在wasm中使用sqllite,但是我希望可以有一种更简单的方法来直接查询Arrow数据,而不必将所有数据移到sqllite存储中来对它执行查询。

有什么方法可以做到这一点?

javascript webassembly apache-arrow dremio

11
推荐指数
1
解决办法
411
查看次数

使用 apache 箭头读取一个 R 数据框中的分区镶木地板目录(所有文件)

如何使用箭头将分区的镶木地板文件读入 R(没有任何火花)

情况

  1. 使用 Spark 管道创建镶木地板文件并保存在 S3 上
  2. 使用 RStudio/RShiny 以一列作为索引读取以进行进一步分析

Parquet 文件结构

从我的 Spark 创建的镶木地板文件由几个部分组成

tree component_mapping.parquet/
component_mapping.parquet/
??? _SUCCESS
??? part-00000-e30f9734-71b8-4367-99c4-65096143cc17-c000.snappy.parquet
??? part-00001-e30f9734-71b8-4367-99c4-65096143cc17-c000.snappy.parquet
??? part-00002-e30f9734-71b8-4367-99c4-65096143cc17-c000.snappy.parquet
??? part-00003-e30f9734-71b8-4367-99c4-65096143cc17-c000.snappy.parquet
??? part-00004-e30f9734-71b8-4367-99c4-65096143cc17-c000.snappy.parquet
??? etc
Run Code Online (Sandbox Code Playgroud)

我如何将此 component_mapping.parquet 读入 R?

我试过的

install.packages("arrow")
library(arrow)
my_df<-read_parquet("component_mapping.parquet")
Run Code Online (Sandbox Code Playgroud)

但这因错误而失败

IOError: Cannot open for reading: path 'component_mapping.parquet' is a directory
Run Code Online (Sandbox Code Playgroud)

如果我只读取目录的一个文件,它就可以工作

install.packages("arrow")
library(arrow)
my_df<-read_parquet("component_mapping.parquet/part-00000-e30f9734-71b8-4367-99c4-65096143cc17-c000.snappy.parquet")
Run Code Online (Sandbox Code Playgroud)

但我需要加载所有内容才能对其进行查询

我在文档中发现的

在 apache 箭头文档 https://arrow.apache.org/docs/r/reference/read_parquet.htmlhttps://arrow.apache.org/docs/r/reference/ParquetReaderProperties.html 我发现有一些区域read_parquet() 命令的属性,但我无法让它工作,也找不到任何示例。

read_parquet(file, col_select = NULL, as_data_frame = TRUE, props = ParquetReaderProperties$create(), ...)
Run Code Online (Sandbox Code Playgroud)

如何正确设置属性以读取完整目录?

# should …
Run Code Online (Sandbox Code Playgroud)

r rstudio parquet apache-arrow

10
推荐指数
4
解决办法
3444
查看次数

使用 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
查看次数

Spark数据框到箭头

我已经在Python中使用Apache Arrow和Spark一段时间了,并且通过使用Pandas作为中介,我可以轻松地在数据帧和Arrow对象之间进行转换.

然而,最近,我已经从Python迁移到Scala与Spark交互,并且在Scala(Java)中使用Arrow并不像在Python中那样直观.我的基本需求是尽快将Spark数据帧(或RDD,因为它们很容易转换)转换为Arrow对象.我最初的想法是首先转换为Parquet并从Parquet转到Arrow,因为我记得那个pyarrow可以从Parquet读取.但是,如果我错了,请纠正我,在看了一段时间的Arrow Java文档后,我找不到Parquet to Arrow功能.Java版本中不存在此功能吗?有没有另一种方法可以将Spark数据帧提供给Arrow对象?也许将数据帧的列转换为数组然后转换为箭头对象?

任何帮助将非常感激.谢谢

编辑:找到以下链接,将镶木地板架构转换为箭头架构.但它似乎没有从我需要的镶木地板文件中返回一个Arrow对象:https: //github.com/apache/parquet-mr/blob/70f28810a5547219e18ffc3465f519c454fee6e5/parquet-arrow/src/main/java/org/apache /parquet/arrow/schema/SchemaConverter.java

scala dataframe apache-spark apache-arrow

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

Apache镶木地板和箭之间的区别

我正在寻找一种加快应用程序内存密集型前端的方法。我看到有人推荐Apache Arrow,而在研究它的同时,我对Parquet和Arrow之间的区别感到困惑。

它们都是列化数据结构。最初,我认为镶木地板用于磁盘,而箭头则用于内存格式。但是,我刚刚了解到,您也可以将箭头保存到桌面上的文件中,例如abc.arrow。在这种情况下,有什么区别?他们不是在做同样的事情吗?

parquet apache-arrow

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

逐行构建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
查看次数

R 中的数据表包是否支持超过 2^31 行的数据表?

我正在尝试进行交叉连接(来自此处的原始问题),并且我有 500GB 的内存。问题是最后的data.table行数超过 2^31 行,所以我收到此错误:

Error in vecseq(f__, len__, if (allow.cartesian || notjoin || !anyDuplicated(f__,  : 
  Join results in more than 2^31 rows (internal vecseq reached physical limit). Very likely misspecified join. Check for duplicate key values in i each of which join to the same group in x over and over again. If that's ok, try by=.EACHI to run j for each group to avoid the large allocation. Otherwise, please search for this error message …
Run Code Online (Sandbox Code Playgroud)

merge r cross-join data.table apache-arrow

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

如何将巨大的熊猫数据帧保存到HDFS?

我正在处理熊猫和Spark数据帧。数据帧始终很大(> 20 GB),而标准的火花功能不足以容纳这些大小。目前,我将我的熊猫数据框转换为火花数据框,如下所示:

dataframe = spark.createDataFrame(pandas_dataframe)  
Run Code Online (Sandbox Code Playgroud)

我进行这种转换是因为通过火花将数据帧写入hdfs非常容易:

dataframe.write.parquet(output_uri, mode="overwrite", compression="snappy")
Run Code Online (Sandbox Code Playgroud)

但是,对于大于2 GB的数据帧,转换失败。如果将spark数据框转换为熊猫,则可以使用pyarrow:

// temporary write spark dataframe to hdfs
dataframe.write.parquet(path, mode="overwrite", compression="snappy")

// open hdfs connection using pyarrow (pa)
hdfs = pa.hdfs.connect("default", 0)
// read parquet (pyarrow.parquet (pq))
parquet = pq.ParquetDataset(path_hdfs, filesystem=hdfs)
table = parquet.read(nthreads=4)
// transform table to pandas
pandas = table.to_pandas(nthreads=4)

// delete temp files
hdfs.delete(path, recursive=True)
Run Code Online (Sandbox Code Playgroud)

这是从Spark到Pandas的快速会话,它也适用于大于2 GB的数据帧。我还找不到其他方法可以做到这一点。意思是有一个熊猫数据框,我在pyarrow的帮助下将其转换为火花。问题是我真的找不到如何将熊猫数据帧写入hdfs。

我的熊猫版本:0.19.0

python pandas apache-spark apache-arrow pyarrow

7
推荐指数
1
解决办法
9058
查看次数