2

我试图在 python 中读取镶木地板文件。我使用了镶木地板和 json 导入。我使用了下面的代码,因为我不想使用熊猫。

with open("test.parquet") as fo:
    for row in parquet.DictReader(fo):
        print(json.dumps(row))

这似乎工作得很好。我想在 R 中实现相同的功能,所以我尝试使用“reticulate”在 R 中使用 python 函数。我使用了以下代码:

library(reticulate)
py <- import_builtins()
pq <- import("parquet")
js <- import("json")

with(py$open("test.parquet") %as% pq_file, {
for (val in pq$DictReader(pq_file)) {
print(js$dumps(val))}})

因为我只是在尝试,所以我尝试了不同的东西,我得到了不同的错误。对于上面的代码,我得到了这个。

Error in for (val in pq$DictReader(pq_file)) { : invalid for() loop sequence

我也试过这个:

with(py$open("test.parquet") %as% pq_file, {
for (val in 1:4) {
print(js$dumps(pq$DictReader(pq_file)$keys()[val]))}})

和错误:

AttributeError: 'generator' object has no attribute 'keys'

我正在尝试使用 reticulate 来读取 R 中的 parquet 文件。或任何其他方式来读取 R 中的 parquet 文件。我根本不想使用 pandas。我也试过pyarrow,但是需要pandas来干预

如果我可以在 R 中将 python 与 Context 或 For 循环一起使用(我认为这不可行,但以防万一),我认为可以做到。如果有人对此有任何了解。让我知道。

谢谢

4

1 回答 1

0

如果您不介意使用 Spark,并且只想在不使用 Pandas 的情况下以任何方式读取 R 中的 parquet 文件,您可以使用sparklyr包和spark_read_parquet函数轻松读取它。

以下是有关其使用的参考:https ://spark.rstudio.com/reference/spark_read_parquet/

以下对我来说很好(Ubuntu 18.04):

library(sparklyr)

spark_conn <- spark_connect(master = "local")

data_frame <- collect(spark_read_parquet(spark_conn, "my_parquet", "~/data/my_parquet.parquet"))

spark_disconnect(spark_conn)

为此,请确保同时安装了sparklyrdplyr

install.packages(dplyr)
install.packages(sparklyr)

如果你需要配置 Spark,spark_install()一旦你加载了 sparklyr ,就会有一个简单的界面使用(前提是你使用 Java 8)。您可以通过使用轻松降级 Java

sudo apt install openjdk-8-jdk
sudo update-alternatives --config java ==> select the option to use Java 8
于 2019-01-14T01:13:50.683 回答