相关疑难解决方法(0)

对于像1989Dec31和31Dec1989这样的日期,pyspark无法识别spark.read.load()中的MMM dateFormat模式

pyspark 在macOS Sierra上遇到了一个非常奇怪的问题.我的目标是以ddMMMyyyy格式解析日期(例如:),31Dec1989但会收到错误.我运行Spark 2.0.1,Python 2.7.10和Java 1.8.0_101.我也试过使用Anaconda 4.2.0(它附带Python 2.7.12),但也得到了错误.

Ubuntu Server 15.04上具有相同Java版本和Python 2.7.9的相同代码可以正常运行而不会出现任何错误.

关于州的官方文件spark.read.load():

dateFormat - 设置指示日期格式的字符串.自定义日期格式遵循以下格式java.text.SimpleDateFormat.这适用于日期类型.如果设置为None,则使用默认值value yyyy-MM-dd.

官方Java文档有关谈判MMM的正确的格式解析如月的名字Jan,Dec等等,但它抛出了很多开始的错误java.lang.IllegalArgumentException.文档说明LLL也可以使用,但pyspark不识别它并抛出pyspark.sql.utils.IllegalArgumentException: u'Illegal pattern component: LLL'.

我知道另一个解决方案dateFormat,但这是解析数据的最快方法和最简单的代码.我在这里错过了什么?

为了运行下面的例子你只需要放置test.csvtest.py在同一目录下,然后运行<spark-bin-directory>/spark-submit <working-directory>/test.py.

我的测试用例使用ddMMMyyyy格式

我有一个名为test.csv包含以下两行的纯文本文件:

col1
31Dec1989
Run Code Online (Sandbox Code Playgroud)

代码如下:

from pyspark.sql import SparkSession
from pyspark.sql.types import *

spark = …
Run Code Online (Sandbox Code Playgroud)

python java date-formatting apache-spark pyspark

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

WEEK_OF_YEAR 在不同机器上不一致

更新:好的,我似乎找到了一半的答案。如果我使用无参数 getInstance 创建我的日历,我会得到 WEEK_OF_YEAR = 52。但是,如果我通过向 getInstance 提供 Local.getDefaul() 来创建它,我会得到 WEEK_OF_YEAR = 1。完全没想到这个......我想需要重新阅读日历文档。

根据时间戳构建日历,对应于Sat, 01 Jan 2011 00:00:00 GMT

相同的代码,使用 java.util.Date、Calendar 和 TimeZone,在不同的机器上(使用相同的语言环境)表现不同;日历中的所有字段都相同,除了 WEEK_OF_YEAR。在我的机器上它是 52(实际上在我的两台机器上)。在我同事的机器上它是 1(这似乎是正确的)。

import java.util.Date;
import java.util.TimeZone;
import java.util.Calendar;
import java.util.Locale;

public class CalendarTest {

    public static void main(String[] args) {

        Locale l = Locale.getDefault();
        System.out.println(l);
        Long d = new Long(1293840000000l);

        Calendar c = Calendar.getInstance();
        c.setTimeZone(TimeZone.getTimeZone("UTC"));
        c.setTime(new Date(d));

        System.out.println(c.toString());
}
Run Code Online (Sandbox Code Playgroud)

.. locale 是 en_US,但 Calendar 是:

>java.util.GregorianCalendar[time=1293840000000,
areFieldsSet=true,
areAllFieldsSet=true,
lenient=true,
zone=sun.util.calendar.ZoneInfo[
id="UTC",
offset=0,
dstSavings=0, …
Run Code Online (Sandbox Code Playgroud)

java jvm calendar

4
推荐指数
1
解决办法
709
查看次数

标签 统计

java ×2

apache-spark ×1

calendar ×1

date-formatting ×1

jvm ×1

pyspark ×1

python ×1