小编set*_*127的帖子

pyspark:有效地使partitionBy写入与原始表相同数量的总分区

我有一个与pyspark repartitionBy()函数相关的问题,我最初在这个问题的评论中发布了这个问题.我被要求将其作为一个单独的问题发布,所以这里是:

据我所知,df.partitionBy(COL)将每个值写入所有行COL到他们自己的文件夹,并且每个文件夹将(假设行以前通过其他键分布在所有分区上)具有与之前在文件中大致相同的文件数.整张桌子.我发现这种行为很烦人.如果我有一个包含500个分区的大表,并且我partitionBy(COL)在一些属性列上使用,我现在有100个文件夹,每个文件夹包含500个(现在非常小)文件.

我想要的是partitionBy(COL)行为,但文件大小和文件数量大致相同.

作为演示,上一个问题共享一个玩具示例,其中有一个包含10个分区的表,partitionBy(dayOfWeek)并且现在有70个文件,因为每个文件夹中有10个.我想要~10个文件,每天一个,可能需要2或3天,有更多的数据.

这可以轻松完成吗?喜欢的东西,df.write().repartition(COL).partitionBy(COL)好像它可能工作,但我担心,(在一个非常大的表,该表将被划分为多个文件夹的情况下),其首先将它结合到一些小的分区数之前做的partitionBy(COL)似乎是一个坏主意.

任何建议都非常感谢!

apache-spark pyspark

22
推荐指数
1
解决办法
5787
查看次数

pyspark 提取 ROC 曲线?

有没有办法从pyspark中的Spark ML获取ROC曲线上的点?在文档中,我看到了一个 Scala 的例子,但不是 python:https : //spark.apache.org/docs/2.1.0/mllib-evaluation-metrics.html

那正确吗?我当然可以想出实现它的方法,但我不得不想象如果有一个预先构建的函数它会更快。我正在处理 300 万个分数和几十个模型,所以速度很重要。

pyspark apache-spark-ml

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

如何在R中的正则表达式中避开闭括号"]"

我正在尝试使用gsubR来替换我正在处理的一些字符串中的一堆奇怪的字符.一切正常,除非我投入"]",这使整个事情无所作为.我正在使用\\,gsub("[\\?\\*\\]]", "", name)但它仍然无法正常工作.这是我的实际例子:

name <- "R U Still Down? [Remember Me]"
Run Code Online (Sandbox Code Playgroud)

我想要的是:names成为"R U Still Down Remember Me"

当我这样做: names <- gsub("[\\(\\)\\*\\$\\+\\?'\\[]", "", name) 它半工作,我得到"R U Still Down Remember Me]"

但是当我这样做时: names <- gsub("[\\(\\)\\*\\$\\+\\?'\\[\\]]", "", name) 没有任何反应.(即我得到"R U Still Down? [Remember Me]")

有任何想法吗?我试过切换事情的顺序,等等.但我似乎无法弄明白.

regex r gsub

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

将非常大的CSV数据集加载到Python和R中,Pandas挣扎

我正在将一个巨大的csv(18GB)加载到内存中,并注意到R和Python之间存在很大的差异.这是在AWS ec2 r4.8xlarge上,它有244 Gb的内存.显然这是一个极端的例子,但原理也适用于真实机器上的小文件.

使用pd.read_csv我的文件需要大约30分钟加载并占用174Gb的内存.基本上这么多,以至于我无法用它做任何事情.相比之下,fread()来自data.table封装的R 需要大约7分钟而且只有~55Gb的内存.

为什么pandas对象占用的内存比data.table对象多得多?此外,为什么从根本上说,熊猫对象几乎比磁盘上的文本文件大10倍?它不像.csv是一种特别有效的方式来存储数据.

python csv r pandas data.table

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

嵌套计划(多会话)将来不会释放内存

最近,我一直在使用future(andfuture.applyfurrr) 在 R 中进行一些并行处理,这大部分都很棒,但我偶然发现了一些我无法解释的东西。这可能是某个地方的错误,但也可能是我编码的草率。如果有人能解释这种行为,我们将不胜感激。

设置

我正在对数据的不同子组运行模拟。对于每个组,我想运行模拟n时间,然后计算结果的一些汇总统计数据。以下是一些示例代码,用于重现我的基本设置并演示我所看到的问题:

library(tidyverse)
library(future)
library(future.apply)

# Helper functions

#' Calls out to `free` to get total system memory used
sys_used <- function() {
  .f <- system2("free", "-b", stdout = TRUE)
  as.numeric(unlist(strsplit(.f[2], " +"))[3])
}

#' Write time, and memory usage to log file in CSV format
#' @param .f the file to write to 
#' @param .id identifier for the row to be written
mem_string <- function(.f, .id) …
Run Code Online (Sandbox Code Playgroud)

r r-future

7
推荐指数
0
解决办法
690
查看次数

将火花数据帧写入单个镶木地板文件

我正在尝试做一些非常简单的事情,但我遇到了一些非常愚蠢的斗争。我认为这一定与对 Spark 正在做什么的根本误解有关。我将不胜感激任何帮助或解释。

我有一个非常大的(~3 TB,~300MM 行,25k 分区)表,在 s3 中保存为镶木地板,我想给某人一个小样本作为单个镶木地板文件。不幸的是,这需要很长时间才能完成,我不明白为什么。我尝试了以下方法:

tiny = spark.sql("SELECT * FROM db.big_table LIMIT 500")
tiny.coalesce(1).write.saveAsTable("db.tiny_table")
Run Code Online (Sandbox Code Playgroud)

然后当那不起作用时,我尝试了这个,我认为应该是一样的,但我不确定。(我添加了print' 以进行调试。)

tiny = spark.table("db.big_table").limit(500).coalesce(1)
print(tiny.count())
print(tiny.show(10))
tiny.write.saveAsTable("db.tiny_table")
Run Code Online (Sandbox Code Playgroud)

当我看纱UI,打印报表,并write使用25K映射器。在count历时3分钟,则show花了25分钟,并且write把〜40分钟,虽然最后没有写我一直在寻找一个文件表。

在我看来,第一行应该取前 500 行并将它们合并到一个分区,然后其他行应该发生得非常快(在单个映射器/减速器上)。谁能看到我在这里做错了什么?有人告诉我也许我应该使用sample而不是,limit但据我所知它limit应该快得多。那正确吗?

提前感谢您的任何想法!

apache-spark pyspark pyspark-sql

6
推荐指数
1
解决办法
9393
查看次数

R S3 类 - 更改类并传递回相同的方法

我有一个关于在 R 中使用 S3 类执行某些操作的“正确”方法的问题。我想要做的是有一个方法可以更改类,然后在新类上调用相同的方法。像这样的东西:

my_func <- function(.x, ...) {
  UseMethod("my_func")
}

my_func.character <- function(.x, ...) {
  return(paste(".x is", .x, "of class", class(.x)))
}

my_func.numeric <- function(.x, ...) {
  .x <- as.character(.x)
  res <- my_func(.x) # this should call my_func.character
  return(res)
}
Run Code Online (Sandbox Code Playgroud)

这有效。当我执行以下操作时,我会character同时获得课程

> my_func("hello")
[1] ".x is hello of class character"
> my_func(1)
[1] ".x is 1 of class character"
Run Code Online (Sandbox Code Playgroud)

我的问题是:这是正确的方法吗?在转换类之后重新调用相同的方法(这一行res <- my_func(.x))感觉很奇怪。

我觉得NextMethod()一定是答案,但我读过很多关于它的文档(例如这个这个),但他们都讨论了这个事情,它跳到类列表中的下一个类,例如例如,data.frame直到matrix您拥有class(df) …

r r-s3

6
推荐指数
1
解决办法
297
查看次数

检查pandas中的值对是否在一对列中

基本上,我在两个不同的列中有纬度和经度(在网格上).我得到了一个新坐标集的两元素列表(可能是numpy数组),我想在添加它之前检查它是否是重复的.

例如,我的数据:

df = pd.DataFrame([[4,8, 'wolf', 'Predator', 10],
              [5,6,'cow', 'Prey', 10],
              [8, 2, 'rabbit', 'Prey', 10],
              [5, 3, 'rabbit', 'Prey', 10],
              [3, 2, 'cow', 'Prey', 10],
              [7, 5, 'rabbit', 'Prey', 10]],
              columns = ['lat', 'long', 'name', 'kingdom', 'energy'])

newcoords1 = [4,4]
newcoords2 = [7,5]
Run Code Online (Sandbox Code Playgroud)

是否可以写一个if语句告诉我是否已经存在具有该纬度和经度的行.在伪代码中:

if newcoords1 in df['lat', 'long']:
    print('yes! ' + str(newcoords1))
Run Code Online (Sandbox Code Playgroud)

(在这个例子中,newcoords1应该false而且newcoords2应该是true.

旁注:(newcoords1[0] in df['lat']) & (newcoords1[1] in df['long'])不起作用,因为它独立地检查它们,但我需要知道该组合是否出现在一行中.

先感谢您!

python dataframe pandas

5
推荐指数
1
解决办法
2506
查看次数

在 SQL 中,为什么这个 JOIN 两次返回键列?

如果这是一个愚蠢的问题,我很抱歉,但我似乎无法理解它。我对 SQL 相当陌生,这种行为在 R 或 Pandas 或我习惯使用的其他东西中会很奇怪。

基本上,我在两个不同的数据库中有两个表,有一个公共键user_id。我想加入所有列

SELECT * FROM db1.first_table t1 
JOIN db2.second_table t2 
ON t1.user_id = t2.user_id
Run Code Online (Sandbox Code Playgroud)

太好了,它有效。除了有两个(相同的)列称为user_id. 这并不重要,除了我在 pyspark 中执行此操作时,当我尝试将连接表导出到平面文件时,我收到一个错误,即其中两列具有相同的名称。对此有解决方法,但我只是想知道是否有人可以解释为什么连接返回 user_id列。它似乎是一个内部连接,因此根据定义,列是相同的。为什么它会同时返回?

作为一个附带问题,是否有一种简单的方法可以避免这种行为?

提前致谢!

sql pyspark-sql

5
推荐指数
1
解决办法
2679
查看次数

从 R 中的 tibble 创建列表列表(tidyverse)

我正在尝试做一些看起来很简单的事情,但我无法弄清楚。我有一个像这样的小玩意:

> df <- tibble::tribble(
  ~col_a, ~col_b,
  1,      "A",   
  2,      "B",   
  3,      "C",   
)
> df
# # A tibble: 3 x 2
# col_a col_b
# <dbl> <chr>
#   1     A    
#   2     B    
#   3     C 
Run Code Online (Sandbox Code Playgroud)

我想把它变成一个看起来像这样的列表

> str(res_list)
# List of 3
# $ :List of 2
# ..$ col_a: num 1
# ..$ col_b: chr "A"
# $ :List of 2
# ..$ col_a: num 2
# ..$ col_b: chr "B"
# $ :List of 2 …
Run Code Online (Sandbox Code Playgroud)

r dplyr purrr tibble

5
推荐指数
2
解决办法
443
查看次数