标签: partitioning

如何定义DataFrame的分区?

我已经开始在Spark 1.4.0中使用Spark SQL和DataFrames.我想在Scala中定义DataFrame上的自定义分区程序,但是没有看到如何执行此操作.

我正在使用的一个数据表包含一个事务列表,按帐户,silimar到下面的示例.

Account   Date       Type       Amount
1001    2014-04-01  Purchase    100.00
1001    2014-04-01  Purchase     50.00
1001    2014-04-05  Purchase     70.00
1001    2014-04-01  Payment    -150.00
1002    2014-04-01  Purchase     80.00
1002    2014-04-02  Purchase     22.00
1002    2014-04-04  Payment    -120.00
1002    2014-04-04  Purchase     60.00
1003    2014-04-02  Purchase    210.00
1003    2014-04-03  Purchase     15.00
Run Code Online (Sandbox Code Playgroud)

至少在最初,大多数计算将发生在帐户内的交易之间.所以我希望对数据进行分区,以便帐户的所有事务都在同一个Spark分区中.

但我没有看到定义这个的方法.DataFrame类有一个名为"repartition(Int)"的方法,您可以在其中指定要创建的分区数.但我没有看到任何方法可用于为DataFrame定义自定义分区程序,例如可以为RDD指定.

源数据存储在Parquet中.我确实看到在向Parquet编写DataFrame时,您可以指定要分区的列,因此我可以告诉Parquet通过"帐户"列对其数据进行分区.但是可能有数百万个帐户,如果我正确理解Parquet,它会为每个帐户创建一个独特的目录,因此这听起来不是一个合理的解决方案.

有没有办法让Spark分区这个DataFrame,以便一个帐户的所有数据都在同一个分区?

scala partitioning dataframe apache-spark apache-spark-sql

119
推荐指数
5
解决办法
14万
查看次数

动物园管理员是卡夫卡必须的吗?

在Kafka中,我想只使用单个代理,单个主题和一个具有一个生产者和多个消费者的分区(每个消费者从代理获得自己的数据副本).鉴于此,我不希望使用Zookeeper的开销; 我不能只使用经纪人吗?为什么动物园管理员必须?

partitioning producer-consumer broker apache-kafka apache-zookeeper

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

HashPartitioner如何运作?

我读了一下文档HashPartitioner.不幸的是,除了API调用之外没有解释太多.我假设HashPartitioner根据键的哈希对分布式集进行分区.例如,如果我的数据是这样的

(1,1), (1,2), (1,3), (2,1), (2,2), (2,3)
Run Code Online (Sandbox Code Playgroud)

因此,分区器会将其放入不同的分区,同一个键落在同一个分区中.但是我不明白构造函数参数的意义

new HashPartitoner(numPartitions) //What does numPartitions do?
Run Code Online (Sandbox Code Playgroud)

对于上述数据集,如果我这样做,结果会有何不同

new HashPartitoner(1)
new HashPartitoner(2)
new HashPartitoner(10)
Run Code Online (Sandbox Code Playgroud)

那么HashPartitioner工作怎么样呢?

scala partitioning apache-spark rdd

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

熊猫:采样数据框架

我正在尝试用Pandas读取一个相当大的CSV文件并将其分成两个随机块,其中一个是10%的数据,另一个是90%.

这是我目前的尝试:

rows = data.index
row_count = len(rows)
random.shuffle(list(rows))

data.reindex(rows)

training_data = data[row_count // 10:]
testing_data = data[:row_count // 10]
Run Code Online (Sandbox Code Playgroud)

出于某种原因,sklearn当我尝试在SVM分类器中使用这些结果DataFrame对象之一时抛出此错误:

IndexError: each subindex must be either a slice, an integer, Ellipsis, or newaxis
Run Code Online (Sandbox Code Playgroud)

我想我做错了.有一个更好的方法吗?

python partitioning pandas

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

什么是MYSQL分区?

我已经阅读了文档(http://dev.mysql.com/doc/refman/5.1/en/partitioning.html),但我想用你自己的话说,它是什么以及为什么使用它.

  1. 它主要用于多个服务器,所以它不会拖动一个服务器?
  2. 因此,部分数据将在server1上,部分数据将在server2上.服务器3将"指向"server1或server2 ......它是如何工作的?
  3. 为什么MYSQL文档侧重于在同一服务器内进行分区...如果目的是将其分布在服务器上?

mysql database partitioning

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

将列表划分为n个大小的列表的有效方法

我有一个数组,我想分成更小的n个数组,并对每个数组执行操作.我目前的做法是

用Java中的ArrayLists实现(任何伪代码都可以)

    for (int i = 1; i <= Math.floor((A.size() / n)); i++) {
            ArrayList temp = subArray(A, ((i * n) - n),
                    (i * n) - 1);
            // do stuff with temp
        }

    private ArrayList<Comparable> subArray(ArrayList A, int start,
                int end) {
            ArrayList toReturn = new ArrayList();
            for (int i = start; i <= end; i++) {
                toReturn.add(A.get(i));
            }
            return toReturn;
        }
Run Code Online (Sandbox Code Playgroud)

其中A是列表,n是所需列表的大小

我相信这种方式在处理相当大的列表(大小高达100万)时花费了太多时间,所以我试图弄清楚什么会更有效率.

java partitioning arraylist

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

MySQL分区/分片/分裂 - 哪种方式去?

我们有一个大约70 GB的InnoDB数据库,我们预计它会在未来2到3年内增长到几百GB.大约60%的数据属于一个表.目前数据库运行良好,因为我们有一个64 GB RAM的服务器,所以几乎整个数据库都适合内存,但我们担心未来数据量会大得多.现在我们正在考虑某种方式来分割表格(尤其是占据数据最大部分的表格),我现在想知道,最好的方法是什么.

我目前知道的选项是

  • 使用5.1版附带的MySQL分区
  • 使用某种封装数据分区的第三方库(如hibernate分片)
  • 在我们的应用程序中自己实现它

我们的应用程序基于J2EE和EJB 2.1构建(希望有一天我们可以切换到EJB 3).

你会建议什么?

编辑(2011-02-11):
只是一个更新:目前数据库的大小是380 GB,我们的"大"表的数据大小是220 GB,其索引的大小是36 GB.因此,虽然整个表不再适合内存,但索引确实如此.
系统仍然运行良好(仍然在相同的硬件上),我们仍然在考虑分区数据.

编辑(2014-06-04):还有一个更新:整个数据库的大小是1.5 TB,我们的"大"表的大小是1.1 TB.我们将服务器升级到具有128 GB RAM的4处理器机器(Intel Xeon E7450).该系统仍然表现良好.我们接下来要做的是将我们的大表放在一个单独的数据库服务器上(我们已经在我们的软件中进行了必要的更改),同时升级到具有256 GB RAM的新硬件.

这个设置应该持续两年.然后我们要么必须最终开始实施分片解决方案,要么只购买1 TB RAM的服务器,这应该让我们继续使用一段时间.

编辑(2016-01-18):

从那以后,我们将自己的大表放在单独的服务器上.目前,该数据库的大小约为1.9 TB,另一个数据库的大小(除了"大"之外的所有表)都是1.1 TB.

当前硬件设置:

  • HP ProLiant DL 580
  • 4 x Intel(R)Xeon(R)CPU E7- 4830
  • 256 GB RAM

此设置的性能很好.

mysql partitioning sharding database-performance

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

LINQ分区列表包含8个成员的列表

如何获取List(使用LINQ)并将其分解为每隔8个条目分区原始列表的列表列表?

我想像这样的东西会涉及Skip和/或Take,但我仍然是LINQ的新手.

编辑:使用C#/ .Net 3.5

编辑2:这个问题的措辞不同于其他"重复"问题.虽然问题是相似的,但这个问题的答案是优越的:"接受"的答案都非常可靠(包括yield声明)以及Jon Skeet建议使用MoreLinq(在"其他"问题中不推荐使用).有时复制是好的,因为它们迫使重新检查问题.

linq partitioning skip take

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

拥有8000万条记录并添加索引的表需要超过18个小时(或永远)!怎么办?

简要回顾一下发生的事情.我正在处理7100万条记录(与其他人处理的数十亿条记录相比并不多).在另一个线程上,有人建议我的群集的当前设置不适合我的需要.我的表结构是:

CREATE TABLE `IPAddresses` (
  `id` int(11) unsigned NOT NULL auto_increment,
  `ipaddress` bigint(20) unsigned default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM;
Run Code Online (Sandbox Code Playgroud)

我添加了7100万条记录,然后做了一个:

ALTER TABLE IPAddresses ADD INDEX(ipaddress);
Run Code Online (Sandbox Code Playgroud)

这是14个小时,操作仍未完成.通过谷歌搜索,我发现有一个众所周知的方法来解决这个问题 - 分区.我知道我现在需要根据ipaddress对我的表进行分区,但是我可以在不重新创建整个表的情况下执行此操作吗?我的意思是,通过ALTER声明?如果是,则有一个要求说要分区的列应该是主键.我将使用这个ipaddress的id来构建一个不同的表,所以ipaddress不是我的主键.在这种情况下,如何对表格进行分区?

mysql database database-design partitioning

31
推荐指数
3
解决办法
5万
查看次数

如何理解线性分区中的动态编程解决方案?

我正在努力理解线性分区问题的动态编程解决方案.我正在阅读算法设计手册,问题在8.5节中描述.我已经无数次阅读了这个部分,但我只是没有得到它.我认为这是一个糟糕的解释(我现在读到的内容已经好多了),但是我还没有能够很好地理解这个问题以寻找替代解释.欢迎链接到更好的解释!

我找到了一个页面,其中包含类似于本书的文本(可能来自本书的第一版):分区问题.

第一个问题:在本书的示例中,分区从最小到最大排序.这只是巧合吗?从我可以看出,元素的排序对算法并不重要.

这是我对递归的理解:

让我们使用以下序列并将其分为4:

{S1...Sn} =  100   150   200   250   300   350   400   450   500
k = 4
Run Code Online (Sandbox Code Playgroud)

第二个问题:这就是我认为递归将如何开始 - 我理解正确吗?

第一次递归是:

100   150   200   250   300   350   400   450 | 500 //3 partition to go
100   150   200   250   300   350   400 | 450 | 500 //2 partition to go 
100   150   200   250   300   350 | 400 | 450 | 500 //1 partition to go
100   150   200   250   300 | 350 | …
Run Code Online (Sandbox Code Playgroud)

algorithm partitioning dynamic-programming

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