我一直在玩一些非常庞大的数据集,通常是数十亿个元素,这些数据都保存在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)
虽然这在理论上适用于小型数据集,但您可以猜测有一个打嗝:
我完成了我的家庭作业,并发现了一些研究论文或一些不起眼的图书馆,但这部分目标的一部分是了解哪种方法有效以及为什么.
所以我打电话给你的Python用户,你知道任何能帮我估算基数的算法吗?复杂性我的意思是我并不关心运行时复杂性,但我更关注空间复杂性.我不介意牺牲一点准确性,如果它极大地提高性能(所以我不一定需要知道uniques的确切数量,即使这是理想的,但可能不是一个可行的方法).我会说高达5%是可以接受的.我正在为这个项目寻找专门用于Python的东西.
感谢您的任何帮助,您可以提供 !
正如一些人所指出的,我可以使用Hadoop/MR,但对于这个特定的项目,我们不想采用MR方式,并且希望探索算法在一台机器上有效地执行此操作,因为这可以应用于其他几个不同的项目.
我认为他们指的是减速机,但在我的程序中我有
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.setInputFormatClass和job.setOutputFormatClass?因为没有它们我的程序运行正常.
我正在尝试调整现有问题以满足我的需求..
基本上输入是简单的文本我处理它并将键/值对传递给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) 我通过谷歌发现的所有文章都已过时或相互矛盾.
在c#中打印表单或者说富文本框的最简单方法是什么?我认为PrintDiaglog通过设置它来使用类Document,但是如何转换它?
我正在使用一个类库,它代表了.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) [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%.可能是什么导致了这个?
我正在开发一个应用程序,其工作流程通过使用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的日期/时区上挣扎太久,并且认为有人可以帮我一把.
基本上我想在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) 我正在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
hadoop ×4
mapreduce ×3
python ×3
c# ×2
java ×2
amazon-emr ×1
amazon-sqs ×1
boto ×1
cardinality ×1
jetty ×1
memcached ×1
monads ×1
optimization ×1
parsing ×1
set ×1
timezone ×1
winforms ×1
xml ×1