什么是使用的优点,NullWritable
对null
使用过的键/值null
文本(即new Text(null)
).我从"Hadoop:The Definitive Guide"一书中看到以下内容.
NullWritable
是一种特殊类型Writable
,因为它具有零长度序列化.没有字节写入或读取流.它用作占位符; 例如,在MapReduce中,NullWritable
当您不需要使用该位置时,可以将键或值声明为- 它有效地存储常量空值.SequenceFile
当您想要存储值列表而不是键值对时,NullWritable也可以用作键.它是一个不可变的单例:可以通过调用来检索实例NullWritable.get()
我不清楚如何使用输出写出输出NullWritable
?在开始输出文件中是否有一个常量值表示该文件的键或值是null
,因此MapReduce框架可以忽略读取null
键/值(以哪个为准null
)?另外,null
文本是如何序列化的?
谢谢,
Venkat
我想读取文件路径,无论它们是HDFS还是本地路径.目前,我传递带有前缀file://的本地路径和带有前缀hdfs://的HDFS路径,并编写如下代码
Configuration configuration = new Configuration();
FileSystem fileSystem = null;
if (filePath.startsWith("hdfs://")) {
fileSystem = FileSystem.get(configuration);
} else if (filePath.startsWith("file://")) {
fileSystem = FileSystem.getLocal(configuration).getRawFileSystem();
}
Run Code Online (Sandbox Code Playgroud)
从这里我使用FileSystem的API来读取文件.
如果还有其他比这更好的方法,你能告诉我吗?
在Reduce设置方法中,我试图关闭一个BufferedReader
对象并获得一个FileSystem
封闭的异常.它不会一直发生.这是我用来创建的代码片段BufferedReader
.
String fileName = <some HDFS file path>
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(conf);
Path hdfsPath = new Path(filename);
FSDataInputStream in = fs.open(hdfsPath);
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
Run Code Online (Sandbox Code Playgroud)
我从bufferedReader读取内容,一旦完成所有读取,我就关闭它.
这是读取它的代码段
String line;
while ((line = reader.readLine()) != null) {
// Do something
}
Run Code Online (Sandbox Code Playgroud)
这段关闭读者的代码.
if (bufferedReader != null) {
bufferedReader.close();
}
Run Code Online (Sandbox Code Playgroud)
这是我执行时发生的异常的堆栈跟踪bufferedReader.close()
.
我,[2013-11-18T04:56:51.601135#25683]信息 - :attempt_201310111840_142285_r_000009_0:at org.apache.hadoop.hdfs.DFSClient.checkOpen(DFSClient.java:565)
我,[2013-11-18T04:56:51.601168#25683]信息 - :attempt_201310111840_142285_r_000009_0:at org.apache.hadoop.hdfs.DFSInputStream.close(DFSInputStream.java:522)
I,[2013-11-18T04:56:51.601199#25683] INFO - :attempt_201310111840_142285_r_000009_0:at …
我广泛使用 Apache Commons 包,尤其是 StringUtils、BooleanUtils、ObjectUtils、MapUtils 类,发现它们非常有用。我想知道是否有诸如 IntegerUtils、DoubleUtils 之类的类为其各自的包装类提供了类似的功能(我在 Apache Commons 包中找不到此类类)。
谢谢,
文卡特
我想写一个Bounded Priority Queue类.这本质上是一个优先级队列,但是对队列中可以存在的元素数量有一定的限制.因此,如果我插入一个新元素并且队列已满,那么我会看到该元素是否大于队列的顶部.如果是,那么我丢弃新元素.如果不是,那么我删除顶部元素并插入这个新元素(并自动重新组织队列).我目前已经实现了从PriorityQueue派生的BoundedPriorityQueue,它具有"maxCount"成员,我已经覆盖了add方法并添加了我上面描述的功能.我想知道我是否应该考虑使用组合方式而不是继承方式.我目前的做法似乎很简单.
如果我要去编写组合,那么我必须从AbstractQueue类派生,实现这些方法,然后用它组成优先级队列.
谢谢,
Venk
我试图了解Java原语和包装器是如何工作的.让我们考虑以下示例.
Integer sum = 0;
for(int i = 0; i < 10000; ++i) {
sum += i;
}
Run Code Online (Sandbox Code Playgroud)
由于Integer是不可变的并且是非原始的,因此该语句sum += i
将被编译为如下
sum = new Integer(sum.intValue() + i).
Run Code Online (Sandbox Code Playgroud)
这将创建大约10000个Integer对象(每次调用new Integer
)以及sum.intValue()
将Integer拆箱到int 的成本.
我对吗?
我正在为OS X 10.7寻找免费的SFTP,SCP和FTP客户端.使用这个,我想有一个连接到Linux盒子的GUI客户端来查看和复制文件(我使用WinScp从我的Windows机器连接到linux盒子).你能告诉我一些适用于我的场景的东西.目前,我正在使用ssh和scp.
谢谢,
Venkat
给定绝对基本路径,我想从绝对路径获取相对路径。是否有任何 Hadoop Java API 可以做到这一点?
例如,如果我的绝对 HDFS 路径是abs_path = hdfs://name-node/level1/level2/level3
并且我的绝对基本路径是abs_base_path = hdfs://name-node/level1
,我想从 中提取相对路径abs_path
,即rel_path = level2/level3
. 我熟悉使用路径构造函数来组合两个路径。
例如,如果我有rel_path
and abs_base_path
,我可以使用 Path 类中重载的构造函数之一http://hadoop.apache.org/docs/current/api/org/apache/hadoop/fs/Path
来构建,abs_path
但我找不到 API 来执行相反的操作。
我不确定这个问题是否属于这里.我编写了以下方法将对象强制转换为特定类型.
private static <T> T cast(Object obj) {
return (T) (obj);
}
Run Code Online (Sandbox Code Playgroud)
我想知道为什么我在Guava或Apache Commons中找不到这样的方法?我错过了什么吗?
谢谢,
Venk
我将此问题通过电子邮件发送至 dev@commons.apache.org,但尚未得到答复。
我正在尝试将 maven 依赖项添加到最新的 commons-collections 包中,我从站点看到的是 4.0 ( http://commons.apache.org/proper/commons-collections/javadocs/api-release/index.html)。
我从 maven central 看到它的版本是 20040616。这看起来像是日期而不是版本号。但是,jar 的内容似乎与http://commons.apache.org/proper/commons-collections/javadocs/api-release/index.html 上的 API 相匹配。我想确认这是否是我应该添加的实际 4.0 依赖项。
公共收藏 公共收藏 20040616
谢谢,
文克
我在Ruby中有以下代码:
class Base
def Function1
puts 'Base Function1'
end
def Function2
Function1
end
end
class Derived < Base
def Function1
puts 'Derived Function1'
end
end
obj = Derived.new
obj.Function2
Run Code Online (Sandbox Code Playgroud)
当我运行上面的代码时,我收到以下错误:
/Users/vkuppuswamy/.rvm/rubies/ruby-2.0.0-p0/bin/ruby -e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift) /Users/vkuppuswamy/RubymineProjects/TestRubyProj/TestRuby.rb
/Users/vkuppuswamy/RubymineProjects/TestRubyProj/TestRuby.rb:7:in `Function2': uninitialized constant Base::Function1 (NameError)
from /Users/vkuppuswamy/RubymineProjects/TestRubyProj/TestRuby.rb:18:in `<top (required)>'
from -e:1:in `load'
from -e:1:in `<main>'
Run Code Online (Sandbox Code Playgroud)
我可以看到,Function2
在课堂上Base
,已经尝试调用一些常量Function1
.我不明白为什么会这样.我以为Function1
将调用派生类方法.当我Function2
将基类更改为:
def Function2
self.Function1
end
Run Code Online (Sandbox Code Playgroud)
在那里我调用Function1
使用self
,它的工作原理,我在输出得到:
Derived Function1
Run Code Online (Sandbox Code Playgroud)
你能帮我理解为什么会这样吗?我以为这self
是隐含在Ruby中的.