小编tho*_*ers的帖子

如何从Hadoop中的文本解析CustomWritable

假设我在文本文件中为特定用户设置了时间戳,例如

#userid; unix-timestamp; value
1; 2010-01-01 00:00:00; 10
2; 2010-01-01 00:00:00; 20
1; 2010-01-01 01:00:00; 11
2; 2010-01-01 01:00:00, 21
1; 2010-01-02 00:00:00; 12
2; 2010-01-02 00:00:00; 22
Run Code Online (Sandbox Code Playgroud)

我有一个自定义类"SessionSummary"实施阅读字段写入WritableComparable.其目的是为每个日历日总结每个用户的所有值.

因此,映射器的线给每个用户映射,减速器总结每天的所有值每个用户,并输出作为SessionSummary TextOutputFormat(使用的toStringSessionSummary,作为制表符分隔的UTF-8字符串):

1; 2010-01-01; 21
2; 2010-01-01; 41
1; 2010-01-02; 12
2; 2010-01-02; 22
Run Code Online (Sandbox Code Playgroud)

如果我需要将这些摘要条目用于第二个Map/Reduce阶段,我应该如何解析此摘要数据以填充成员?我可以通过使用文本String作为DataInput以某种方式重用现有的readField和write方法(WritableComparable接口实现)吗?这(显然)不起作用:

public void map(...) {
    SessionSummary ssw = new SessionSummary();
    ssw.readFields(new DataInputStream(new ByteArrayInputStream(value.getBytes("UTF-8"))));
}
Run Code Online (Sandbox Code Playgroud)

一般而言:是否有最佳实践在Hadoop中实现自定义键和值,并使它们可以在多个M/R阶段轻松重用,同时在每个阶段保持人类可读的文本输出?

(Hadoop版本为0.20.2/CDH3u3)

java hadoop mapreduce

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

如何在Sqoop导出中使用autoincrement-IDs

我在HDFS中有一个以制表符分隔的文本文件,并希望将其导出到MySQL表中.

由于文本文件中的行没有数字ID,如何导出到SQL INSERT(自动增量)期间自动设置ID的表?

如果我尝试导出(id是表中最后定义的属性),我得到

java.util.NoSuchElementException
  at java.util.AbstractList$Itr.next(AbstractList.java:350)
  at entity.__loadFromFields(entity.java:996)
Run Code Online (Sandbox Code Playgroud)

如果我使用自动生成的类并修改它以排除id属性,我得到

java.io.IOException: java.sql.SQLException: No value specified for parameter 27
Run Code Online (Sandbox Code Playgroud)

其中参数27是'id'.

版本是Sqoop 1.3.0-cdh3u3

hadoop sqoop

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

使用 IJava 的 Google Colab 笔记本在安装 + 刷新后卡在“正在连接”

在初始 IJava 安装和浏览器页面刷新后,我的所有笔记本都停止连接。

以前做什么工作

  1. 执行第一个单元格
!wget https://github.com/SpencerPark/IJava/releases/download/v1.3.0/ijava-1.3.0.zip 
!unzip ijava-1.3.0.zip 
!python install.py --sys-prefix
Run Code Online (Sandbox Code Playgroud)
  1. 等待Installed java kernel消息

  2. 刷新浏览器页面。

  3. 使用 Java 代码执行任何单元。

现在发生的是

我可以执行第一个单元格并获取消息Installed java kernel,看到笔记本状态为“已连接”。

但刷新页面后,笔记本的状态永远停留在“正在连接”,

因此没有单元格可以被执行。

--

我免费使用 Google Colab,但由于初始安装仍然有效,并且刷新页面之前笔记本状态为“已连接”,因此这应该不是问题。

知道发生了什么变化,以及如何让我的 Java 笔记本再次连接吗?

--

更新1

页面重新加载后,当我尝试运行包含 Java 代码的单元格时,这是我在一段时间后收到的错误消息:

await connected: disconnected
@https://ssl.gstatic.com/colaboratory-static/common/5f9fa09db4e185842380071022f6c9a6/external_polymer_binary_l10n__en_gb.js:6249:377
promiseReactionJob@[native code]
Run Code Online (Sandbox Code Playgroud)

另外,笔记本设置是

运行时类型:java

硬件加速器:None

这些单元包含非常简单的 Java 代码,没有外部库,没有 CPU 或 GPU 密集型内容。

出于调试目的,我尝试运行其他单元(例如安装 Java 或 Python 代码的单元),但当然,它们在没有连接的情况下也不会执行。

--

更新2

安装 IJava 后和页面重新加载之前,我注意到 Java 内核的路径与“预安装”ir 和 python3 内核的路径不同:

!jupyter kernelspec list

 Available kernels:
  ir …
Run Code Online (Sandbox Code Playgroud)

python java jupyter jupyter-notebook google-colaboratory

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

iOS报亭应用 - 如何实现免费订阅?

假设我写了一个报亭应用程序,所有内容(所有问题)都可以免费下载.

Apple要求报亭应用提供至少一个订阅,这将是一个非过期的免费订阅.

我的问题:

*)我认为我不打电话是正确的

[[UIApplication sharedApplication] registerForRemoteNotificationTypes: UIRemoteNotificationTypeNewsstandContentAvailability];   
Run Code Online (Sandbox Code Playgroud)

直到用户选择订阅?这意味着,只有拥有有效订阅的用户才能收到报刊亭推送通知?

*)我是否正确地假设我实际上必须在iTunes Connect中为此应用程序设置"真实"免费订阅并在应用程序中使用StoreKit处理它,或者是否足以呈现"立即免费订阅"按钮,调用上面的代码?

*)用户取消订阅的位置和方式?我是否必须在应用程序中提供此功能,或者它(隐藏)在报亭(应用程序)商店的某处?

谢谢!

ios newsstand-kit

4
推荐指数
1
解决办法
5030
查看次数

MapReduce(二级)排序/过滤 - 如何?

我有一个聊天室webapp的不同"区域"的时间戳值(并发用户)的日志文件,格式为"Timestamp; Zone; Value".对于每个区域,每天每分钟存在一个值.

对于每个区域,我想列出每天的最大值,按此最大值排序desc

所以,一个输入文件

#timestamp; zone; value
2011-01-01 00:00:00; 1; 10
2011-01-01 00:00:00; 2; 22
2011-01-01 00:01:00; 1; 11
2011-01-01 00:01:00; 2; 21

2011-01-02 00:00:00; 1; 12
2011-01-02 00:00:00; 2; 20
Run Code Online (Sandbox Code Playgroud)

应为区域1生产:

2011-01-02    12
2011-01-01    11
Run Code Online (Sandbox Code Playgroud)

对于第2区:

2011-01-01    22
2011-01-02    20
Run Code Online (Sandbox Code Playgroud)

我该如何处理?恕我直言,我需要一个以上的M/R步骤.

到目前为止我实施的是:

  • 收集文本键"YYYY-MM-DD/Zone"和IntWritable值"value"的映射器,以及
  • 减速器,用于标识每个键的最大值(即每个区域每天).

这会产生一个类似的文件

2011-01-01/1    11
2011-01-01/2    22
2011-01-02/1    12
2011-01-02/2    20
Run Code Online (Sandbox Code Playgroud)

这是第二次M/R步骤的输入吗?如果是这样,我会把什么作为关键和价值?

我已经研究过"Hadoop - The Definitive Guide"中的"Secondary Sort"示例,但我不确定是否以及如何在此处应用它.

是否可以将M/R分成几个输出文件(每个区域一个)?

更新 在考虑之后,我会尝试这样做:

  • 使密钥成为zone-id和value的组合(使用IntPair?)
  • 编写自定义KeyComparator和GroupComparator

java sorting hadoop mapreduce

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