我正在寻找Apache Arrow API的有用文档或示例.有人能指出一些有用的资源吗?我只能找到一些博客和JAVA文档(这并没有多说).
根据我的阅读,它是用于快速分析的标准内存柱状数据库.是否可以将数据加载到箭头存储器并进行操作?
我有存储在客户端浏览器内存中的数据。例如,假设数据集如下:
"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存储中来对它执行查询。
有什么方法可以做到这一点?
如何使用箭头将分区的镶木地板文件读入 R(没有任何火花)
情况
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.html和 https://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) 我正在尝试通过 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中使用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
我正在寻找一种加快应用程序内存密集型前端的方法。我看到有人推荐Apache Arrow,而在研究它的同时,我对Parquet和Arrow之间的区别感到困惑。
它们都是列化数据结构。最初,我认为镶木地板用于磁盘,而箭头则用于内存格式。但是,我刚刚了解到,您也可以将箭头保存到桌面上的文件中,例如abc.arrow。在这种情况下,有什么区别?他们不是在做同样的事情吗?
我有一个很大的字典,我想遍历它来构建一个 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) 我正在尝试进行交叉连接(来自此处的原始问题),并且我有 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) 我正在处理熊猫和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
apache-arrow ×10
pyarrow ×3
python ×3
apache-spark ×2
pandas ×2
parquet ×2
r ×2
cross-join ×1
data.table ×1
dataframe ×1
dremio ×1
feather ×1
hadoop ×1
hdfs ×1
java ×1
javascript ×1
merge ×1
rstudio ×1
scala ×1
vaex ×1
webassembly ×1