我有一个.txt文件如下:
这是xyz
这是我的家
这是我的电脑
这是我的房间
这是ubuntu PC xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxxxxxxxxxxxxxxxxxxxxx
(忽略每条记录后的空白行)
我已将块大小设置为64字节.我要检查的是,是否存在单个记录被分成两个块的情况.
现在逻辑上,因为块大小是64字节,在将文件上传到HDFS之后,它应该分别创建3块大小为64,64,27字节的块.此外,由于第一个块的大小为64字节,因此它应仅包含以下数据:
这是xyz
这是我的家
这是我的电脑
这是我的房间
钍
现在我想看看第一个块是否是这样,如果我通过浏览器浏览HDFS并下载文件,它会下载整个文件而不是单个块.
所以我决定运行一个map-reduce作业,它只显示记录值.(设置reducers=0和mapper输出为context.write(null,record_value),也改变默认分隔符"")
现在,在运行作业时,作业计数器显示3个拆分,这是显而易见的,但在检查输出目录完成后,它显示3个映射器输出文件,其中2个为空,第一个映射器输出文件具有所有内容文件原样.
谁能帮我这个?新版本的hadoop是否有可能自动处理不完整的记录?
我无法理解这个DISTRIBUTE BY子句在HIVE中的作用.我知道这个定义,如果我们有DISTRIBUTE BY(城市),这将使每个城市以不同的REDUCER发送,但我没有得到相同的结果.让我们考虑如下数据:
表数据:
+----------+--------+
| username | amount |
+----------+--------+
| user_1 | 25 |
+----------+--------+
| user_1 | 53 |
+----------+--------+
| user_1 | 28 |
+----------+--------+
| user_1 | 50 |
+----------+--------+
| user_2 | 20 |
+----------+--------+
| user_2 | 50 |
+----------+--------+
| user_2 | 10 |
+----------+--------+
| user_2 | 5 |
+----------+--------+
Run Code Online (Sandbox Code Playgroud)
假设我们有一个包含用户名和数量列的TABLE数据.
现在,如果我说 -
select username,sum(amount) from data DISTRIBUTE by (name)
Run Code Online (Sandbox Code Playgroud)
这不应该运行2个单独的减速器吗?它还在运行一个减速机,我不知道为什么?我认为这可能与CLUSTERING INTO BUCKETS或PARTITIONING有关但我尝试了一切,仍然运行一个减速器可以解释为什么?
我正在尝试使用PySpark在Spark作业中创建自定义分区程序,例如,我有一些整数列表[10,20,30,40,50,10,20,35]。现在,我需要一个场景,其中有两个分区,分别是p1和p2。p1包含所有<30的列表元素,而p2包含30以上的所有元素。
elements = sc.parallelize([10,20,30,40,50,10,20,35]).map(lambda x : (float(x)/10,x)).partitionBy(2).glom().collect()
Run Code Online (Sandbox Code Playgroud)
上面的代码根据我传递的任意键的哈希值对列表进行分区。无论如何,是否有根据特定场景对列表进行分区的信息?像值小于x或类似的东西?