我和我的同事对以下代码的行为感到有点困惑.
def a: String = {
None.foreach(return "1")
return "2"
}
def b: String = {
None.foreach(x => return "1")
return "2"
}
Run Code Online (Sandbox Code Playgroud)
正如所料,调用b确实返回"2".但是,调用a返回"1".何时执行return "1"时正在评估a?
我有两个不同的MySQL表,它们都包含时间序列数据(两者都包含'timestamp'列).除了'timestamp'列之外,这两个表除了'client_id'列之外不共享任何常用功能.
table_a
- id
- client_id
- timestamp
- ...
table_b
- id
- client_id
- timestamp
- ...
Run Code Online (Sandbox Code Playgroud)
两个表都在(client_id,timestamp)上建立索引.
我正在尝试将这两个表组合成一个分页的时间序列.要具体,我的意思是说我试图加载N条记录(与M的偏移量)从联盟table_a和table_b由有序timestamp.
我尝试用这样的语句做到这一点:
(SELECT 'a', id FROM table_a WHERE client_id=1) UNION (SELECT 'b', id FROM table_b WHERE client_id=1) ORDER BY timestamp LIMIT 100;
Run Code Online (Sandbox Code Playgroud)
不幸的是,结果查询似乎抓住了两个表中的所有匹配行,组合,然后应用LIMIT.
请注意,针对各个表的查询非常快:
SELECT 'a', id FROM table_a WHERE client_id=1 ORDER by timestamp LIMIT 100
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来索引表或编写UNION查询?
当使用 Sqoop 将一堆大型 MySQL 表导入 HDFS 时,我忘记包含 --hive-import 标志。现在我已经将这些表放在 HDFS 中,并且想知道是否有一种简单的方法将数据加载到 Hive 中(无需自己编写 LOAD DATA 语句)。
我尝试使用 sqoop create-hive-table:
./bin/sqoop create-hive-table --connect jdbc:mysql://xxx:3306/dw --username xxx --password xxx --hive-import --table tweets
Run Code Online (Sandbox Code Playgroud)
虽然这确实创建了正确的配置单元表,但它没有将任何数据导入其中。我有一种感觉,我在这里错过了一些简单的东西......
根据记录,我使用 Elastic MapReduce 和 Sqoop 1.4.1。