小编Cha*_*guy的帖子

如何了解解析器组合器?

我已经找到了一些关于这个主题的资源,但它们都需要深入了解SmallTalkHaskell,我都不知道.

monads parsing

18
推荐指数
2
解决办法
7342
查看次数

如何在Python中有效地计算非常大的数据集的基数?

我一直在玩一些非常庞大的数据集,通常是数十亿个元素,这些数据都保存在memcached云中并定期转储到文件中,对于我的一个任务,我正在尝试计算基数的基数.这一套.

对于某些上下文,每个项目包含一个IP和一些其他标识一个人的属性,并以base64编码,项目大小为20个字节.通过删除某些字段来减小项目的大小是不可能的.

这是一个模拟我的数据集作为内存版本的东西(感谢这篇文章生成字符串):

import base64, os

dataset_size = 10000000000 # that's 10 billion, be careful if you run it !
big_dataset = [base64.b64encode(os.urandom(10)) for i in range(dataset_size)]
Run Code Online (Sandbox Code Playgroud)

我的第一种方法是使用这样的hashset:

uniques = set(big_dataset)
print "Cardinality: %d" % len(uniques)
Run Code Online (Sandbox Code Playgroud)

虽然这在理论上适用于小型数据集,但您可以猜测有一个打嗝:

  • 我无法对数据的唯一性做出任何假设.我可以拥有50%的独特数据集,或者我也可以拥有100%的数据集.这是以固定的时间间隔动态生成的,并且根据很多因素(例如,时间)而变化
  • 数据集规模在10亿.以base 64编码的每个项目是20个字节,100亿次是平均几百GB.不幸的是,我无法访问具有那么多RAM的机器!

我完成了我的家庭作业,并发现了一些研究论文或一些不起眼的图书馆,但这部分目标的一部分是了解哪种方法有效以及为什么.

所以我打电话给你的Python用户,你知道任何能帮我估算基数的算法吗?复杂性我的意思是我并不关心运行时复杂性,但我更关注空间复杂性.我不介意牺牲一点准确性,如果它极大地提高性能(所以我不一定需要知道uniques的确切数量,即使这是理想的,但可能不是一个可行的方法).我会说高达5%是可以接受的.我正在为这个项目寻找专门用于Python的东西.

感谢您的任何帮助,您可以提供 !

正如一些人所指出的,我可以使用Hadoop/MR,但对于这个特定的项目,我们不想采用MR方式,并且希望探索算法在一台机器上有效地执行此操作,因为这可以应用于其他几个不同的项目.

python optimization memcached set cardinality

16
推荐指数
1
解决办法
4303
查看次数

job.setOutputKeyClass和job.setOutputReduceClass在哪里引用?

我认为他们指的是减速机,但在我的程序中我有

public static class MyMapper extends Mapper< LongWritable, Text, Text, Text >

public static class MyReducer extends Reducer< Text, Text, NullWritable, Text >

所以,如果我有

job.setOutputKeyClass( NullWritable.class );

job.setOutputValueClass( Text.class );

我得到以下例外

Type mismatch in key from map: expected org.apache.hadoop.io.NullWritable, recieved org.apache.hadoop.io.Text

但如果我有

job.setOutputKeyClass( Text.class );

没有问题.

我的代码是否有错误,或者这是因为NullWritable还是其他?

我也必须使用job.setInputFormatClassjob.setOutputFormatClass?因为没有它们我的程序运行正常.

java hadoop mapreduce

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

从map中键入不匹配的值:expected org.apache.hadoop.io.NullWritable,recieved org.apache.hadoop.io.Text

我正在尝试调整现有问题以满足我的需求..

基本上输入是简单的文本我处理它并将键/值对传递给reducer我创建一个json ..所以有键但没有值所以mapper:

输入:文字/文字

输出:文本/文本

减速器:文本/文本

输出:文本/无

我的签名如下:

public class AdvanceCounter {
/**
 * The map class of WordCount.
 */
public static class TokenCounterMapper
    extends Mapper<Object, Text, Text, Text> { // <--- See this signature

   public void map(Object key, Text value, Context context) // <--- See this signature
        throws IOException, InterruptedException {

     context.write(key,value); //both are of type text OUTPUT TO REDUCER
    }
}
   public static class TokenCounterReducer
    extends Reducer<Text, Text, Text, **NullWritable**> { // <--- See this signature Nullwritable here …
Run Code Online (Sandbox Code Playgroud)

java hadoop mapreduce

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

打印Winform/visual元素

我通过谷歌发现的所有文章都已过时或相互矛盾.

在c#中打印表单或者说富文本框的最简单方法是什么?我认为PrintDiaglog通过设置它来使用类Document,但是如何转换它?

c# winforms

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

如何从调用XmlSerializer.Serialize创建XmlNode?

我正在使用一个类库,它代表了.xml中的一些配置.使用以下方式读入配置XmlSerializer.幸运的是,代表.xml的类使用的XmlAnyElement属性允许我为了自己的目的扩展配置数据,而无需修改原始类库.

<?xml version="1.0" encoding="utf-8"?>
<Config>
  <data>This is some data</data>
  <MyConfig>
    <data>This is my data</data>
  </MyConfig>
</Config>
Run Code Online (Sandbox Code Playgroud)

这适用于反序列化.我能够允许类库正常反序列化.xml,我可以使用我自己的XmlSerializer实例与XmlNodeReader内部对象XmlNode.

public class Config
{
    [XmlElement]
    public string data;

    [XmlAnyElement]
    public XmlNode element;
}

public class MyConfig
{
    [XmlElement] 
    public string data;
}

class Program
{
    static void Main(string[] args)
    {
        using (Stream fs = new FileStream(@"c:\temp\xmltest.xml", FileMode.Open))
        {
            XmlSerializer xser1 = new XmlSerializer(typeof(Config));
            Config config = (Config)xser1.Deserialize(fs);

            if (config.element != null)
            {
                XmlSerializer …
Run Code Online (Sandbox Code Playgroud)

c# xml

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

Hadoop WordCount示例卡在地图上100%减少0%

[hadoop-1.0.2] ? hadoop jar hadoop-examples-1.0.2.jar wordcount /user/abhinav/input     /user/abhinav/output
Warning: $HADOOP_HOME is deprecated.

****hdfs://localhost:54310/user/abhinav/input
12/04/15 15:52:31 INFO input.FileInputFormat: Total input paths to process : 1
12/04/15 15:52:31 WARN util.NativeCodeLoader: Unable to load native-hadoop library for     your platform... using builtin-java classes where applicable
12/04/15 15:52:31 WARN snappy.LoadSnappy: Snappy native library not loaded
12/04/15 15:52:31 INFO mapred.JobClient: Running job: job_201204151241_0010
12/04/15 15:52:32 INFO mapred.JobClient:  map 0% reduce 0%
12/04/15 15:52:46 INFO mapred.JobClient:  map 100% reduce 0%
Run Code Online (Sandbox Code Playgroud)

我使用本指南在单个节点上设置了hadoop(http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-single-node-cluster/#run-the-mapreduce -job)我正在尝试运行一个提供的示例,但我在地图上遇到了100%减少0%.可能是什么导致了这个?

hadoop mapreduce

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

如何使用Python中的boto库获取Amazon SQS队列中的所有消息?

我正在开发一个应用程序,其工作流程通过使用boto在SQS中传递消息来管理.

我的SQS队列逐渐增长,我无法检查它应该包含多少元素.

现在我有一个守护进程定期轮询队列,并检查我是否有一组固定大小的元素.例如,考虑以下"队列":

q = ["msg1_comp1", "msg2_comp1", "msg1_comp2", "msg3_comp1", "msg2_comp2"]
Run Code Online (Sandbox Code Playgroud)

现在我要检查,如果我在队列一起在某个时间点"msg1_comp1","msg2_comp1"和"msg3_comp1",但我不知道队列的大小.

查看API后,您似乎只能获得1个元素或队列中固定数量的元素,但不是全部:

>>> rs = q.get_messages()
>>> len(rs)
1
>>> rs = q.get_messages(10)
>>> len(rs)
10
Run Code Online (Sandbox Code Playgroud)

答案中提出的建议是在循环中获取10个消息,直到我什么也得不回来,但SQS中的消息具有可见性超时,这意味着如果我从队列中轮询元素,它们将不会被真正删除,它们只会在短时间内隐形.

是否有一种简单的方法来获取队列中的所有消息,而不知道有多少消息?

python boto amazon-sqs

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

Python将tzinfo传递给没有pytz的天真日期时间

我一直在Python的日期/时区上挣扎太久,并且认为有人可以帮我一把.

基本上我想在UTC中进行转换并考虑DST更改.

我从一个Python教程创建了以下tzinfo类(我知道这不是100%准确,但它不需要):

from datetime import tzinfo, timedelta, datetime

ZERO = timedelta(0)
HOUR = timedelta(hours=1)

def first_sunday_on_or_after(dt):
    days_to_go = 6 - dt.weekday()
    if days_to_go:
        dt += timedelta(days_to_go)
    return dt

DSTSTART_2007 = datetime(1, 3, 8, 2)
DSTEND_2007 = datetime(1, 11, 1, 1)
DSTSTART_1987_2006 = datetime(1, 4, 1, 2)
DSTEND_1987_2006 = datetime(1, 10, 25, 1)
DSTSTART_1967_1986 = datetime(1, 4, 24, 2)
DSTEND_1967_1986 = DSTEND_1987_2006

class USTimeZone(tzinfo):

    def __init__(self, hours, reprname, stdname, dstname):
        self.stdoffset = timedelta(hours=hours)
        self.reprname = reprname
        self.stdname = stdname
        self.dstname …
Run Code Online (Sandbox Code Playgroud)

python timezone

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

弹性Mapreduce Map输出丢失

我正在Amazon Elastic MapReduce上运行大型(超过100个节点)系列的mapreduce作业.

在reduce阶段,已经完成的map任务会随之失败

Map output lost, rescheduling: getMapOutput(attempt_201204182047_0053_m_001053_0,299) failed :
java.io.IOException: Error Reading IndexFile
    at org.apache.hadoop.mapred.IndexCache.readIndexFileToCache(IndexCache.java:113)
    at org.apache.hadoop.mapred.IndexCache.getIndexInformation(IndexCache.java:66)
    at org.apache.hadoop.mapred.TaskTracker$MapOutputServlet.doGet(TaskTracker.java:3810)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1221)
    at org.apache.hadoop.http.HttpServer$QuotingInputFilter.doFilter(HttpServer.java:835)
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1212)
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:399)
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:450)
    at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
    at org.mortbay.jetty.Server.handle(Server.java:326)
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:928)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Caused by: java.io.EOFException
    at java.io.DataInputStream.readFully(DataInputStream.java:180)
    at java.io.DataInputStream.readLong(DataInputStream.java:399)
    at org.apache.hadoop.mapred.SpillRecord.<init>(SpillRecord.java:74)
    at org.apache.hadoop.mapred.SpillRecord.<init>(SpillRecord.java:54)
    at org.apache.hadoop.mapred.IndexCache.readIndexFileToCache(IndexCache.java:109)
    ... 23 more
Run Code Online (Sandbox Code Playgroud)

映射器针对这种情况的比例很少,足,我不会介意,只是当它,减速机全部暂停,等待1地图任务重新运行所以整个工作一直暂停,每次1-5分钟. …

hadoop jetty amazon-web-services amazon-emr elastic-map-reduce

10
推荐指数
1
解决办法
1645
查看次数