小编Pio*_*sen的帖子

为什么迭代k-way合并O(nk ^ 2)?

k-way merge是一种算法,它采用大小为n的输入k排序数组.它输出所有元素的单个排序数组.

它通过使用合并排序算法中心的"合并"例程将数组1合并到数组2,然后将数组3合并到此合并数组,依此类推,直到所有k个数组合并为止.

我原以为这个算法是O(kn),因为算法遍历每个k个数组(每个长度为n)一次.为什么是O(nk ^ 2)?

algorithm

54
推荐指数
5
解决办法
3万
查看次数

带有双引号和逗号的 AWS Glue 问题

我有这个 CSV 文件:

reference,address
V7T452F4H9,"12410 W 62TH ST, AA D"
Run Code Online (Sandbox Code Playgroud)

表定义中使用了以下选项

ROW FORMAT SERDE 
  'org.apache.hadoop.hive.serde2.OpenCSVSerde' 
WITH SERDEPROPERTIES ( 
  'quoteChar'='\"', 
  'separatorChar'=',') 
Run Code Online (Sandbox Code Playgroud)

但它仍然无法识别数据中的双引号,并且双引号字段中的逗号弄乱了数据。当我运行 Athena 查询时,结果如下所示

reference     address
V7T452F4H9    "12410 W 62TH ST
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

hadoop hive presto amazon-athena aws-glue

16
推荐指数
2
解决办法
1万
查看次数

Amazon Athena - 将时间戳转换为日期?

查看日期/时间 Athena 文档,我没有看到执行此操作的函数,这让我感到惊讶。我看到的最接近的是date_trunc('week', timestamp)但结果类似于2017-07-09 00:00:00.000我希望格式为2017-07-09

是否有一个简单的函数可以将时间戳转换为日期?

sql presto amazon-athena

14
推荐指数
1
解决办法
3万
查看次数

如何通过Java中的(unicode)名称获取字符?我需要与Character.getName相反(int codePoint)

如何使用其Unicode名称在Java中查找字符或int代码点?

例如,如果

Character.getName('\u00e4')
Run Code Online (Sandbox Code Playgroud)

回报"LATIN SMALL LETTER A WITH DIAERESIS",我如何进行反向操作(即从去"LATIN SMALL LETTER A WITH DIAERESIS"'\u00e4'),使用"普通"的Java?

编辑:要停止我想要或不想要的评论洪流,这是我在Python中要做的:

"\N{LATIN SMALL LETTER A WITH DIAERESIS}" # this gives me what I want as a literal

unicodedata.lookup("LATIN SMALL LETTER A WITH DIAERESIS") # a dynamic version
Run Code Online (Sandbox Code Playgroud)

现在,问题是:在Java中做同样的事情.

而且,顺便说一句,我不想​​"打印unicode转义" - 实际上获取字符的十六进制很容易,但我想要一个名字的字母.

换句话说,我想反过来做什么Character.getName(int).

java unicode

11
推荐指数
2
解决办法
1652
查看次数

雅典娜大于日期栏中的条件

我有以下查询,我试图在雅典娜上运行.

SELECT observation_date, COUNT(*) AS count
FROM db.table_name
WHERE observation_date > '2017-12-31'
GROUP BY observation_date
Run Code Online (Sandbox Code Playgroud)

但是它产生了这个错误:

SYNTAX_ERROR: line 3:24: '>' cannot be applied to date, varchar(10)
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎很奇怪.我的查询中是否存在错误,或者Athena是否无法处理日期列上的运算符?

谢谢!

sql amazon-web-services presto amazon-athena

9
推荐指数
2
解决办法
1万
查看次数

Amazon Athena:将 bigint 时间戳转换为可读时间戳

我正在使用 Athena 查询以 bigInt 格式存储的日期。我想将其转换为友好的时间戳。

我试过了:

    from_unixtime(timestamp DIV 1000) AS readableDate
Run Code Online (Sandbox Code Playgroud)

     to_timestamp((timestamp::bigInt)/1000, 'MM/DD/YYYY HH24:MI:SS') at time zone 'UTC' as readableDate
Run Code Online (Sandbox Code Playgroud)

我收到了两者的错误。我是 AWS 的新手。请帮忙!

sql amazon-web-services presto amazon-athena

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

雅典娜无法使用 OpenCSVSerde 解析日期

我在 S3 上有一个非常简单的 csv 文件

"i","d","f","s"
"1","2018-01-01","1.001","something great!"
"2","2018-01-02","2.002","something terrible!"
"3","2018-01-03","3.003","I'm an oil man"
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用以下命令创建一个表

CREATE EXTERNAL TABLE test (i int, d date, f  float, s string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' 
LOCATION 's3://mybucket/test/'
TBLPROPERTIES ("skip.header.line.count"="1");
Run Code Online (Sandbox Code Playgroud)

当我查询表 ( select * from test) 时,出现如下错误:

HIVE_BAD_DATA:
解析字段 1 的字段值“ 2018-01-01”时出错:对于输入字符串:“2018-01-01”

更多信息:

  • 如果我将d列更改为字符串,则查询将成功
  • 我以前使用 Athena 解析文本文件中的日期;我相信使用LazySimpleSerDe
  • 绝对看起来像是 OpenCSVSerde 的问题

文档明确暗示这是支持的。寻找遇到此问题的任何人,或任何建议。

csv hive opencsv presto amazon-athena

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

Presto的硬件要求

我怀疑答案是"它取决于",但是有没有关于计划用于Presto的硬件类型的一般指导?

由于Presto使用协调器和一组工作人员,并且工作人员使用数据运行,因此我认为主要问题是为协调器提供足够的RAM,为工作人员向协调员发送的部分结果有足够的网络带宽等.

如果你可以提供一些关于如何适当调整大小的一般想法,我很乐意听到它们.

presto

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

如何在Windows上用Java创建 - 然后 - 原子重命名文件?

我正在尝试在Windows上使用Java 正确实现"写临时文件并重命名" .

如何在Java中以原子方式重命名文件,即使dest文件已存在?建议重命名文件是"原子操作"(无论"原子"实际上是什么意思). /sf/answers/1439967791/建议编写tmp文件并重命名是跨平台的,并确保最终文件不存在或可由其他进程处理.

所以我试着实际实现这种方法.以下是我的尝试摘要.对于实际问题 - 跳到底部.

写方法

我试着写和重命名文件的各种方法(contentcharsetStringCharset分别对应).

使用java.nio.file.Files:

Files.copy(new ByteArrayInputStream(content.getBytes(charset)), tmpFile);
Files.move(tmpFile, finalFile, StandardCopyOption.ATOMIC_MOVE);
Run Code Online (Sandbox Code Playgroud)

使用番石榴(14)和java.io.File:

com.google.common.io.Files.write(content, tmpFile, charset);
tmpFile.renameTo(finalFile);
Run Code Online (Sandbox Code Playgroud)

或者甚至更模糊的方法:

try (OutputStream os = new FileOutputStream(tmpFile);
        Writer writer = new OutputStreamWriter(os, charset)) {
    writer.write(content);
}
Runtime.getRuntime().exec(
        new String[] { "cmd.exe", "/C", "move " + tmpFile + " " + finalFile }).waitFor();
Run Code Online (Sandbox Code Playgroud)

阅读方法

现在假设另一个线程(线程因为我在测试中,在现实生活中它可能是另一个进程)正在执行以下版本的代码之一:

具有共同功能:

void waitUntilExists() throws InterruptedException {
    while (!java.nio.file.Files.exists(finalFile)) { …
Run Code Online (Sandbox Code Playgroud)

java windows file-io atomicity

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

错误查询失败:无法取消嵌套类型:行

我正在运行一个查询

select bar_tbl.thing1
from foo
cross join unnest(bar) as t(bar_tbl)
Run Code Online (Sandbox Code Playgroud)

并得到了错误 Error Query failed: Cannot unnest type: row

为什么?

条形列看起来像这样 {thing1=abc, thing2=def}

presto

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