我正在尝试将org.apache.pdfbox.pdmodel.PDDocument类和icafe库(https://github.com/dragon66/icafe/)所代表的PDF转换为具有第4组压缩和300 dpi 的多重tiff .示例代码适用于我288 dpi,但奇怪的是不是300 dpi,导出的tiff仍然只是白色.有谁知道这里的问题是什么?
我在示例中使用的示例pdf位于:http://www.bergophil.ch/a.pdf
import java.awt.image.BufferedImage;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import cafe.image.ImageColorType;
import cafe.image.ImageParam;
import cafe.image.options.TIFFOptions;
import cafe.image.tiff.TIFFTweaker;
import cafe.image.tiff.TiffFieldEnum.Compression;
import cafe.io.FileCacheRandomAccessOutputStream;
import cafe.io.RandomAccessOutputStream;
public class Pdf2TiffConverter {
public static void main(String[] args) {
String pdf = "a.pdf";
PDDocument pddoc = null;
try {
pddoc = PDDocument.load(pdf);
} catch (IOException e) {
}
try {
savePdfAsTiff(pddoc);
} catch (IOException e) {
}
}
private static void savePdfAsTiff(PDDocument pdf) …Run Code Online (Sandbox Code Playgroud) 我在Java(Maven)Web项目中有两种测试:使用嵌入式Tomcat 7服务器进行"正常"单元测试和集成测试,使用Selenium进行Jenkins上的自动GUI测试.所有测试都使用JUnit进行注释@Test,正常测试以"Test.java"结束,而集成测试以"IntegrationTest.java"结束.所有测试类都位于src/test/java中
我通常使用构建我的项目mvn clean verify,而我的相关部分pom.xml启动tomcat服务器并相应地拆分测试类别如下所示:
<!-- For front-end testing -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<uriEncoding>UTF-8</uriEncoding>
<additionalConfigFilesDir>${basedir}/conf</additionalConfigFilesDir>
<contextFile>${basedir}/src/test/resources/context.xml</contextFile>
</configuration>
<executions>
<execution>
<id>start-tomcat</id>
<phase>pre-integration-test</phase>
<goals>
<goal>run-war-only</goal>
</goals>
<configuration>
<fork>true</fork>
<port>9090</port>
</configuration>
</execution>
<execution>
<id>stop-tomcat</id>
<phase>post-integration-test</phase>
<goals>
<goal>shutdown</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.16</version>
<configuration>
<excludes>
<exclude>**/*IntegrationTest*</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.16</version>
<configuration>
<includes>
<include>**/*IntegrationTest*</include>
</includes>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
这个过程工作正常,除非我想在eclipse中运行我的测试,我通常右键单击我的项目 - >运行为 - > JUnit测试.通过选择此选项,可以运行所有测试(包括集成测试).在这种情况下,集成测试失败,因为Tomcat没有运行(它只在Maven的 …
我想知道为什么我不能在包含空值(字符串)的Spark(2.1)行上进行模式匹配:
val r = Row(null:String)
r match {case Row(s:String) => println("row is null")}
Run Code Online (Sandbox Code Playgroud)
scala.MatchError:[null](类org.apache.spark.sql.catalyst.expressions.GenericRow)
我一直认为 Spark 不允许定义用户定义的窗口函数。我刚刚从这里测试了“几何平均值”UDAF 示例(https://docs.databricks.com/spark/latest/spark-sql/udaf-scala.html)作为窗口函数,它似乎工作得很好,例如:
val geomMean = new GeometricMean
(1 to 10).map(i=>
(i,i.toDouble)
)
.toDF("i","x")
.withColumn("geom_mean",geomMean($"x").over(Window.orderBy($"i").rowsBetween(-1,1)))
.show()
+---+----+------------------+
| i| x| geom_mean|
+---+----+------------------+
| 1| 1.0|1.4142135623730951|
| 2| 2.0|1.8171205928321397|
| 3| 3.0|2.8844991406148166|
| 4| 4.0|3.9148676411688634|
| 5| 5.0| 4.93242414866094|
| 6| 6.0| 5.943921952763129|
| 7| 7.0| 6.952053289772898|
| 8| 8.0| 7.958114415792783|
| 9| 9.0| 8.962809493114328|
| 10|10.0| 9.486832980505138|
+---+----+------------------+
Run Code Online (Sandbox Code Playgroud)
我从未见过 Spark 文档谈论使用 UDAF 作为窗口函数。这是允许的吗?即结果是否正确?顺便说一下我正在使用spark 2.1
编辑:
让我困惑的是,在标准聚合中(即后跟 a groupBy),数据总是添加到缓冲区中,即它们总是会增长,从不收缩。使用窗口函数(特别是与 结合使用rowsBetween()),数据还需要从缓冲区中删除,因为“旧”元素在沿着排序定义的行移动时会从窗口中删除。我认为窗口函数可以沿着状态的顺序移动。所以我认为必须有类似“删除”方法的东西要实现
假设我有一个包含一列(称为colA)的数据帧,该列是行的seq.我想在每个colA记录中添加一个新字段.(并且新的文件与前一个记录有关,所以我必须写一个udf.)我应该怎么写这个udf?
我试图编写一个udf,它将colA作为输入,并输出Seq [Row],其中每个记录包含新的字段.但问题是udf无法返回Seq [Row] /异常是'Schema for type org.apache.spark.sql.Row不受支持'.我该怎么办?
我写的udf:
val convert = udf[Seq[Row], Seq[Row]](blablabla...)
异常是java.lang.UnsupportedOperationException:不支持类型为org.apache.spark.sql.Row的Schema
我正在插入Spark 2.1的外部蜂巢镶木桌(使用df.write.insertInto(...).通过设置例如
spark.sql("SET spark.sql.parquet.compression.codec=GZIP")
Run Code Online (Sandbox Code Playgroud)
我可以在SNAPPY,GZIP和未压缩之间切换.我可以验证文件大小(和文件名结尾)是否受这些设置的影响.我得到一个名为eg的文件
部分00000-5efbfc08-66fe-4fd1-bebb-944b34689e70.gz.parquet
但是,如果我使用分区的Hive表,此设置没有任何效果,文件大小始终相同.此外,文件名始终是
部分00000
现在,如何在分区的情况下更改(或至少验证)镶木地板文件的压缩编解码器?
我的表是:
CREATE EXTERNAL TABLE `test`(`const` string, `x` int)
PARTITIONED BY (`year` int)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = '1'
)
STORED AS
INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
Run Code Online (Sandbox Code Playgroud) 我尝试从 Java 程序切换Runtime.exec(command)到ProcessBuilder执行 ImageMagick 。convert转换的选项是从用户作为字符串传入的,因此我无法轻松地分离参数以将它们单独传递给 的ProcessBuilder构造函数。在(Unix)命令行上运行的实际命令是
convert -colorspace gray -enhance -density 300 in.pdf out.pdf
Run Code Online (Sandbox Code Playgroud)
我怎样才能让它工作:
public class Demo {
public static void main(String[] args) throws IOException, InterruptedException {
String convertOptions = "-colorspace gray -enhance -density 300"; // arguments passed in at runtime
ProcessBuilder bp = new ProcessBuilder(new String []{"convert",convertOptions,"in.pdf","out.pdf"});
Process process = bp.start();
process.waitFor();
}
}
Run Code Online (Sandbox Code Playgroud)
目前,代码只是运行
我在将多页 pdf 转换为 tiff 时遇到以下问题:
gswin64c.exe -dNumRenderingThreads=8 -dQUIET -dNOPAUSE -dBATCH -sDEVICE=tiffscaled -sCompression=g4 -r300 -o out.tiff in.pdf
Run Code Online (Sandbox Code Playgroud)
in.pdf是带有嵌入图像(即扫描页)的多页 pdf。
从命令行运行时(“gswin64c.exe 停止工作”),在我的 Windows 64 位环境中,命令崩溃(但并不总是在同一页面上),没有 STDERR 写入控制台。我使用最新的 Ghostscript 版本(9.18)。
仅当我使用-dNumRenderingThreads=1.
这可能是什么原因?
编辑:在版本 9.15 中,转换运行良好,从 9.16 开始,它不再工作。
系统日志错误条目显示:
Faulting application name: gswin64c.exe, version: 0.0.0.0, time stamp: 0x56123d41
Faulting module name: gsdll64.dll, version: 0.0.0.0, time stamp: 0x56123d3d
Exception code: 0xc0000005
Fault offset: 0x000000000007b930
Faulting process id: 0x197c
Faulting application start time: 0x01d16325677e4e24
Faulting application path: C:\Program Files\gs\gs9.18\bin\gswin64c.exe
Faulting module path: C:\Program …Run Code Online (Sandbox Code Playgroud) 我正在使用 JNA 来加载本机库:
MyLibrary INSTANCE = (MyLibrary) Native.loadLibrary("mylibrary.so", MyLibrary.class);
Run Code Online (Sandbox Code Playgroud)
现在我想清理并处置图书馆。我已经读过该dispose方法,但这是在类上定义的NativeLibrary,我应该如何调用它?
无论如何,有必要这样做吗?我正在大规模地将 jna 与 Apache Spark 一起使用,因此我加载了该库数千次,我想知道如果我明确调用 nit ,是否还有任何资源保持打开状态dispose?
编辑:我已经看到了问题Jna, Unload Dll from java classdynamic,但它没有为我的问题提供解决方案。
没有公认的答案。人们建议调用NativeLibrary.dispose(),但NativeLibrary. 如果我尝试转换我的库实例(类型为Library),则会收到类转换异常。
我尝试使用最新的Scala-Plugin在IntelliJ 2016.3中运行带有Scala 2.10.5的Apache Spark 1.6.3。该项目是一个maven项目。
如果我尝试使用创建一个新的SparkContext:
val sparkConf = new SparkConf()
val sc = new SparkContext(sparkConf.setAppName("Spark-Scala-Demo").setMaster("local[*]"))
Run Code Online (Sandbox Code Playgroud)
我懂了
17/01/16 14:05:28 ERROR SparkContext: Error initializing SparkContext.
java.lang.ClassNotFoundException: org.apache.spark.rpc.netty.NettyRpcEnvFactory
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.apache.spark.util.Utils$.classForName(Utils.scala:175)
at org.apache.spark.rpc.RpcEnv$.getRpcEnvFactory(RpcEnv.scala:41)
Run Code Online (Sandbox Code Playgroud)
该代码在IntelliJ scala控制台以及定义主方法的普通类中都可以正常运行。
那么,scala工作表有什么不同?