以下是基于格式字符串将字符串转换为Joda datetime对象的代码.
public Datetime ConvertDateTime(String dateStr) {
List<DateTimeFormatter> FORMATTERS =
Arrays.asList(
DateTimeFormat.forPattern("MM/dd/yyyy hh:mm:ss.SSS a"),
DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.SSS"),
DateTimeFormat.forPattern("MM-dd-yyyy hh:mm:ss.SSS a"),
DateTimeFormat.forPattern("MM dd yyyy hh:mm:ss.SSS a"),
DateTimeFormat.forPattern("MM-dd-yyyy hh.mm.ss.SSS a"));
if (dateStr != null) {
for (DateTimeFormatter formatter : FORMATTERS) {
try {
DateTime dt = formatter.parseDateTime(dateStr);
return dt;
} catch (IllegalArgumentException e) {
// Go on to the next format
}
}
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
这段代码为我提供了理想的结果,但是使用异常作为控制流并不是一个好的设计.请优化代码.
我需要验证英国号码
以下是数字的样本类型
01457 341235
0229 111111
Run Code Online (Sandbox Code Playgroud)
+1213 3133143
Optional Plus 应该只在第一个位置被允许
使用此正则表达式但不起作用
^(?:\W*\d){11}\W*$
Run Code Online (Sandbox Code Playgroud) 当我在主笔记上运行此命令时
hadoop
hdumer@HadoopMaster:~$ hive
Run Code Online (Sandbox Code Playgroud)
但是 Hadoop 多节点工作正常
它显示以下错误:
日志使用 jar:file:/usr/local/apache-hive-1.2.1-bin/lib/hive-common-1.2.1.jar!/hive-log4j.properties 中的配置初始化lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.namenode.SafeModeException): 无法创建目录 /tmp/hive/hdumer/d2562e13-52c9-440d-9fe1-54b66b90ed1d。名称节点处于安全模式。报告的块 143 需要额外的 7 个块才能达到总块 150 的阈值 0.9990。活动数据节点 1 的数量已达到最小数量 0。一旦达到阈值,安全模式将自动关闭。在 org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkNameNodeSafeMode(FSNamesystem.java:1327) 在 org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirs(FSNamesystem.java:
在 org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:522) 在 org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:677) 在 org.apache.hadoop .hive.cli.CliDriver.main(CliDriver.java:621) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.hadoop.util.RunJar.run(RunJar.java:221) at org.apache.hadoop。 util.RunJar.main(RunJar.java:136)
引起的:
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.namenode.SafeModeException):无法创建目录/tmp/hive/hdumer/d2562e13-52c9-440d-9fe1-54b66b90ed1d。名称节点处于安全模式。报告的块 143 需要额外的 7 个块才能达到总块 150 的阈值 0.9990。活动数据节点 1 的数量已达到最小数量 0。一旦达到阈值,安全模式将自动关闭。在 org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkNameNodeSafeMode(FSNamesystem.java:1327) 在 org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirs(FSNamesystem.java:3893) 在 org.apache .hadoop.hdfs.server.namenode.NameNodeRpcServer.mkdirs(NameNodeRpcServer.java:983) 在 org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB。
在 org.apache.hadoop.ipc.Client.call(Client.java:1475) 在 org.apache.hadoop.ipc.Client.call(Client.java:1412) 在 org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker .invoke(ProtobufRpcEngine.java:229) at com.sun.proxy.$Proxy15.mkdirs(Unknown Source) at …
我从主管那里得到了一个项目任务,他声称可以在HDInsight(用于Windows)中使用Hive,以便查询两种不同的文件类型,然后从它们中提取数据。这些文件之一是.xls文件,另一个是.csv文件。
我已经设法通过VS将这两个文件上传到Hadoop集群,然后尝试从.xls文件创建Hive表(在使用.csv文件与Hive配合良好的前提下,我曾使用过教程),但使用.xls文件,尝试时不断收到“失败”错误。
我尝试了以下示例代码来创建表,定界,字段终止(其中我尝试了几次但没有成功),文件类型(不确定在此还要使用什么)和目标位置。
DROP TABLE IF EXISTS table1;
CREATE EXTERNAL TABLE IF NOT EXISTS table1(id int, postcde int, city string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ' '
STORED AS TEXTFILE LOCATION 'wasb://container@resourcegroup.blob.core.windows.net/folder1/data.xls/'
Run Code Online (Sandbox Code Playgroud)
我不确定这是否可能实现,因为这里似乎对类似的问题存在矛盾的回答,但是据我的主管说,应该使用Hive做到这一点- 无需将文件类型转换为相同格式,然后再上传到Hadoop!