我正在使用Scala中的Spark应用程序,它使用SBT进行构建.Spark会创建非常详细的日志记录,我希望在测试运行时忽略这些日志记录.
我有一个在src/test/resources下设置的log4j.properties文件,以及包含以下内容的src/main/resources:
# Set everything to be logged to the console
log4j.rootCategory=INFO, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{10}: %m%n
# Settings to quiet third party logs that are too verbose
log4j.logger.akka=ERROR
log4j.logger.Remoting=ERROR
log4j.logger.org.apache.spark=ERROR
log4j.logger.org.eclipse.jetty=ERROR
Run Code Online (Sandbox Code Playgroud)
当使用sbt test或运行完整应用程序运行应用程序时,它正确运行但仍记录与Spark相关的所有INFO级别语句
我在文件配置中是否缺少某些内容,或者我是否需要明确告诉sbt加载log4j.properties?我应该一起尝试一种新的方法吗?
我也受到限制,因为应用程序需要能够在我们的CI环境和应用了日志记录设置的其他用户计算机上运行.这意味着需要在应用程序的git仓库中包含和识别设置.
我希望使用java.nio.file.Files中的功能向任何类型的文件添加自定义元数据标记.我已经能够正确读取元数据,但每当我尝试设置元数据时都会遇到问题.
我尝试使用Files.setAttribute使用以下内容设置带有普通字符串的自定义元数据元素
Path photo = Paths.get("C:\\Users\\some\\picture\\path\\2634.jpeg");
try{
BasicFileAttributes attrs = Files.readAttributes(photo, BasicFileAttributes.class);
Files.setAttribute(photo, "user:tags", "test");
String attribute = Files.getAttribute(photo, "user:tags").toString();
System.out.println(attribute);
}
catch (IOException ioex){
ioex.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
但最终会出现以下错误:
线程"main"java.lang.ClassCastException中的异常:java.lang.String无法强制转换为java.nio.ByteBuffer
如果我尝试将该字符串转换为ByteBuffer,就像这样
Path photo = Paths.get("C:\\Users\\some\\picture\\path\\2634.jpeg");
try{
BasicFileAttributes attrs = Files.readAttributes(photo, BasicFileAttributes.class);
Files.setAttribute(photo, "user:tags", ByteBuffer.wrap(("test").getBytes("UTF-8")));
String attribute = Files.getAttribute(photo, "user:tags").toString();
System.out.println(attribute);
}
catch (IOException ioex){
ioex.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
而不是输出文本'test',它输出奇怪的字符串'[B @ 14e3f41'
将String转换为bytebuffer并将其转换回字符串的正确方法是什么?有一种更可自定义的方法来使用java修改File上的元数据吗?
我正在尝试为一个小脚本编写单元测试,该脚本会从 PostgreSQL 数据库表中删除所有超过 6 个月的条目。该脚本执行以下查询。
DELETE FROM some_table WHERE tstamp < (CURRENT_DATE - INTERVAL '180 days');
Run Code Online (Sandbox Code Playgroud)
该脚本是用Python编写的,我正在使用testing.postgresql创建一个我可以自由操作的本地临时数据库实例。我遇到的问题是,我无法找到一种方法来强制 CURRENT_DATE 为常量值,以便我可以创建特定日期之前和之后的测试条目,并且如果稍后运行测试,则不会更改。
是否可以覆盖 PostgreSQL 数据库中的 CURRENT_DATE 以始终返回预定义时间?
apache-spark ×1
file ×1
java ×1
log4j ×1
metadata ×1
nio ×1
postgresql ×1
python ×1
sbt ×1
scala ×1
time ×1
unit-testing ×1