小编Rap*_*hDG的帖子

使用Scala/Spark提取Teradata表后出现NullPointerException

我需要从Teradata(只读访问)中提取一个表到Scala(2.11)/ Spark(2.1.0).我正在构建一个可以成功加载的数据框

val df = spark.read.format("jdbc").options(options).load()
Run Code Online (Sandbox Code Playgroud)

但是df.show给了我一个NullPointerException:

java.lang.NullPointerException
at org.apache.spark.sql.catalyst.expressions.codegen.UnsafeRowWriter.write(UnsafeRowWriter.java:210)
Run Code Online (Sandbox Code Playgroud)

我做了一个df.printSchema,我发现这个NPE的原因是数据集包含列的null(nullable = false)(看起来Teradata给我错误的信息).实际上,df.show如果我删除有问题的列,我可以实现.

所以,我尝试指定一个新架构,所有列都设置为(nullable = true):

val new_schema = StructType(df.schema.map {
  case StructField(n,d,nu,m) => StructField(n,d,true,m)
})

val new_df = spark.read.format("jdbc").schema(new_schema).options(options).load()
Run Code Online (Sandbox Code Playgroud)

但后来我得到了:

org.apache.spark.sql.AnalysisException: JDBC does not allow user-specified schemas.;
Run Code Online (Sandbox Code Playgroud)

我还尝试从前一个创建一个新的Dataframe,指定所需的模式:

val new_df = df.sqlContext.createDataFrame(df.rdd, new_schema)
Run Code Online (Sandbox Code Playgroud)

但是在对数据帧采取行动时我仍然有一个NPE.

关于如何解决这个问题的任何想法?

scala teradata dataframe apache-spark apache-spark-sql

9
推荐指数
1
解决办法
999
查看次数

Python:在Windows上的signal.pause()等效

我有我的主应用程序线程产生2个线程,我在主线程中捕获SIGINT以很好地退出它们.在linux上,我正在使用signal.pause()它,它完美无缺.

在Windows上实现signal.pause()的最佳方法是什么?

我丑陋的解决方案是:

my_queue.get(True, averylongtime)
Run Code Online (Sandbox Code Playgroud)

并在我的信号处理程序中放入my_queue中的内容.请注意,如果我没有指定超时,则不会捕获SIGINT.但我想知道是否有更好的解决方案.

谢谢

python windows signals

7
推荐指数
1
解决办法
3128
查看次数

在PostgreSQL中使用IYYY进行日期格式化会产生奇怪的结果

使用IYYY和YYYY格式化日期:

SELECT to_char( '2012-12-31'::DATE, 'IYYY-MM-DD' ) AS weird,
       to_char( '2012-12-31'::DATE, 'YYYY-MM-DD' ) AS expected;
Run Code Online (Sandbox Code Playgroud)

结果:

   weird    |  expected  
------------+------------
 2013-12-31 | 2012-12-31
Run Code Online (Sandbox Code Playgroud)

它不会是这个感到惊讶,如果"怪异"的结果是"2013-01-01".

这有什么不对?(PostgreSQL 9.1.7)

postgresql iso date

3
推荐指数
1
解决办法
2956
查看次数