小编Rap*_*oth的帖子

将PDF转换为多页tiff(第4组)

我正在尝试将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 pdf tiff pdfbox icafe

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

在Eclipse IDE中使用JUnit 4排除集成测试

我在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的 …

eclipse junit maven

6
推荐指数
1
解决办法
1173
查看次数

如何在Row上使用空值进行模式匹配?

我想知道为什么我不能在包含空值(字符串)的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)

scala apache-spark

6
推荐指数
1
解决办法
1041
查看次数

每个 Spark UDAF 都可以与 Window 一起使用吗?

我一直认为 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()),数据还需要从缓冲区中删除,因为“旧”元素在沿着排序定义的行移动时会从窗口中删除。我认为窗口函数可以沿着状态的顺序移动。所以我认为必须有类似“删除”方法的东西要实现

scala user-defined-aggregate dataframe apache-spark

6
推荐指数
1
解决办法
1852
查看次数

Spark scala数据框udf返回行

假设我有一个包含一列(称为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

scala user-defined-functions apache-spark

6
推荐指数
1
解决办法
2245
查看次数

写入外部Hive表时的Spark压缩

我正在插入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)

hive apache-spark parquet

6
推荐指数
1
解决办法
565
查看次数

使用 ProcessBuilder 并将参数列表作为单个字符串

我尝试从 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)

目前,代码只是运行

java processbuilder

5
推荐指数
1
解决办法
4012
查看次数

当 -dNumRenderingThreads &gt; 1 时,Ghostscript 9.18 (gswin64c.exe) 崩溃

我在将多页 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)

pdf tiff ghostscript

5
推荐指数
1
解决办法
1667
查看次数

如何处理加载了 JNA 的库

我正在使用 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),则会收到类转换异常。

jna

5
推荐指数
1
解决办法
4316
查看次数

在IntelliJ Scala工作表中使用Apache Spark

我尝试使用最新的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工作表有什么不同?

scala intellij-idea apache-spark

5
推荐指数
1
解决办法
373
查看次数