小编Nar*_*esh的帖子

将Java 8的LocalDateTime转换为Joda的LocalDateTime的简便方法

有没有简单的方法将Java 8的LocalDateTime转换为Joda的LocalDateTime?

其中一种方法是将其转换为String,然后从该String创建Joda的LocalDateTime.

java datetime jodatime java-time

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

什么可能是线程停在java.util.concurrent.ThreadPoolExecutor.getTask的原因

我有一个执行程序负责消耗来自ArrayBlockingQueue的消息.

new ThreadPoolExecutor(1, 1, 0L,
                TimeUnit.MILLISECONDS,
                new LinkedBlockingQueue<>(1),  
                r -> {
                    return new Thread(r, "Request-Queue-Drainer");
                });
Run Code Online (Sandbox Code Playgroud)

Request-Queue-Drainer线程处于WAITING状态(虽然任务正在提交给该线程).以下是线程转储.

Name: Request-Queue-Drainer
State: WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@5b4757a2
Total blocked: 0  Total waited: 8

Stack trace: 
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)

线程处于等待状态的原因是什么?

java multithreading thread-dump executorservice threadpool

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

在写入 Spark 数据帧时更改可空字段

以下代码从 parquet 文件中读取 Spark DataFrame 并写入另一个 parquet 文件。将 DataFrame 写入新 Parquet 文件后,ArrayType DataType 中的 Nullable 字段发生更改。

代码:

    SparkConf sparkConf = new SparkConf();
    String master = "local[2]";
    sparkConf.setMaster(master);
    sparkConf.setAppName("Local Spark Test");
    JavaSparkContext sparkContext = new JavaSparkContext(new SparkContext(sparkConf));
    SQLContext sqc = new SQLContext(sparkContext);
    DataFrame dataFrame = sqc.read().parquet("src/test/resources/users.parquet");
    StructField[] fields = dataFrame.schema().fields();
    System.out.println(fields[2].dataType());
    dataFrame.write().mode(SaveMode.Overwrite).parquet("src/test/resources/users1.parquet");


    DataFrame dataFrame1 = sqc.read().parquet("src/test/resources/users1.parquet");
    StructField [] fields1 = dataFrame1.schema().fields();
    System.out.println(fields1[2].dataType());
Run Code Online (Sandbox Code Playgroud)

输出:

ArrayType(IntegerType,false)
ArrayType(IntegerType,true)
Run Code Online (Sandbox Code Playgroud)

Spark 版本为:1.6.2

dataframe apache-spark apache-spark-sql

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