- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
给定表 1,其中有一列“x”,类型为字符串。我想创建表 2,其中“y”列是“x”中给出的日期字符串的整数表示形式。
基本是在“y”列中保留null
值。
表 1(数据帧 df1):
+----------+
| x|
+----------+
|2015-09-12|
|2015-09-13|
| null|
| null|
+----------+
root
|-- x: string (nullable = true)
表 2(数据帧 df2):
+----------+--------+
| x| y|
+----------+--------+
| null| null|
| null| null|
|2015-09-12|20150912|
|2015-09-13|20150913|
+----------+--------+
root
|-- x: string (nullable = true)
|-- y: integer (nullable = true)
将“x”列的值转换为“y”列的用户定义函数(udf)是:
val extractDateAsInt = udf[Int, String] (
(d:String) => d.substring(0, 10)
.filterNot( "-".toSet)
.toInt )
并且可以工作,处理空值是不可能的。
尽管如此,我可以做类似的事情
val extractDateAsIntWithNull = udf[Int, String] (
(d:String) =>
if (d != null) d.substring(0, 10).filterNot( "-".toSet).toInt
else 1 )
我没有找到通过 udfs“生成”null
值的方法(当然,因为 Int
不能为 null
) 。
我当前创建 df2(表 2)的解决方案如下:
// holds data of table 1
val df1 = ...
// filter entries from df1, that are not null
val dfNotNulls = df1.filter(df1("x")
.isNotNull)
.withColumn("y", extractDateAsInt(df1("x")))
.withColumnRenamed("x", "right_x")
// create df2 via a left join on df1 and dfNotNull having
val df2 = df1.join( dfNotNulls, df1("x") === dfNotNulls("right_x"), "leftouter" ).drop("right_x")
问题:
NullableInt
,以便可以使用以下 udf(请参阅代码摘录)?代码摘录
val extractDateAsNullableInt = udf[NullableInt, String] (
(d:String) =>
if (d != null) d.substring(0, 10).filterNot( "-".toSet).toInt
else null )
最佳答案
这就是Option
派上用场的地方:
val extractDateAsOptionInt = udf((d: String) => d match {
case null => None
case s => Some(s.substring(0, 10).filterNot("-".toSet).toInt)
})
或者在一般情况下使其更加安全:
import scala.util.Try
val extractDateAsOptionInt = udf((d: String) => Try(
d.substring(0, 10).filterNot("-".toSet).toInt
).toOption)
所有功劳归Dmitriy Selivanov谁指出此解决方案是(缺失?)编辑 here .
替代方法是在 UDF 外部处理 null
:
import org.apache.spark.sql.functions.{lit, when}
import org.apache.spark.sql.types.IntegerType
val extractDateAsInt = udf(
(d: String) => d.substring(0, 10).filterNot("-".toSet).toInt
)
df.withColumn("y",
when($"x".isNull, lit(null))
.otherwise(extractDateAsInt($"x"))
.cast(IntegerType)
)
关于scala - SparkSQL : How to deal with null values in user defined function?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32357164/
Hive 外部表指向 S3 上的文件,ddl 包括按 eod 子句分区。一个文件夹下有 5 个子文件夹,每个子文件夹下面都有一个文件,用于不同的 partition_date。即 eod=201806
SparkSQL / DataFrames HBase-Spark连接器(在HBase-Spark模块中)利用Spark-1.2.0中引入的DataSource API (SPARK-3247),弥
我将 RDD[myClass] 转换为数据帧,然后将其注册为 SQL表 my_rdd.toDF().registerTempTable("my_rdd") 该表是可调用的,可以使用以下命令进行演示 %
我在这看到 DataBricks post ,SparkSql 中支持窗口函数,特别是我正在尝试使用 lag() 窗口函数。 我有几行信用卡交易,我已经对它们进行了排序,现在我想遍历这些行,并为每一行
我正在为 hive 使用远程 mysql 元存储。当我运行 hive 客户端时,它运行完美。但是当我尝试通过 spark-shell 或 spark-submit 使用 spark-sql 时,我无法
我有一个 Spark 作业,它正在将数据从 CSV 文件加载到 MySQL 数据库中。 一切正常,但最近我注意到 Spark 在插入阶段打开了许多连接(300 多个连接)。感觉就像每个插入语句都打开一
这段代码来自 Spark Programming Guide , # The result of loading a parquet file is also a DataFrame. parquet
我有一个 Scala spark DataFrame: df.select($"row_id", $"array_of_data").show +----------+----------------
我设计了以下函数来处理任何数字类型的数组: def array_sum[T](item:Traversable[T])(implicit n:Numeric[T]) = item.sum // Reg
我通过 df.saveAsTable 创建了一个持久表 当我运行以下查询时,我会收到这些结果 spark.sql("""SELECT * FROM mytable """).show() 我可以查看
我想通过 sparksql 删除一个配置单元表。 在安装了 hadoop 2.6、hive 2.0、spark 1.6 和 spark 2.0 的集群中。我在两个版本的 pyspark shell 和
我有一个要求,我需要计算 SparkSQL 中 Hive 表的重复行数。 from pyspark import SparkContext, SparkConf from pyspark.sql im
我有一个连接到 Postgres 数据库的 SparkSQL 的非常简单的设置,我正在尝试从一个表中获取一个 DataFrame,该 DataFrame 具有 X 个分区(假设为 2)。代码如下: M
有什么方法可以在 sparksql 中实现存储过程或函数等 sql 功能? 我知道 hbase 中的 hpl sql 和协处理器。但是想知道 spark 中是否有类似的东西。 最佳答案 您可以考虑使用
我正在使用 cloudera vm 10.0,spark 版本为 1.6。 登录 pyspark 控制台后,我正在尝试以下语句从配置单元中获取数据 sqlContext.sql("select * f
我想用 Spark SQL 2.0 执行以下查询 SELECT a.id as id, (SELECT SUM(b.points) FROM tableB b WHERE b.id = a.i
我正在使用 spark sql 对我的数据集运行查询。查询的结果很小,但仍然是分区的。 我想合并生成的 DataFrame 并按列对行进行排序。我试过 DataFrame result = spark
任何人都直接在 HBase 表上使用 SparkSQL,就像在 Hive 表上使用 SparkSQL。 我是spark新手。请指导我如何连接hbase和spark。如何查询hbase表。 最佳答案 A
我正在尝试从 SparkSQL 表(S3 中的 Parquet )中有效地选择单个分区。但是,我看到 Spark 打开表中所有 Parquet 文件的证据,而不仅仅是那些通过过滤器的文件。对于具有大量
我尝试使用 SparkSQL (v.1.3.0) 访问 PostgreSQL 数据库。在这个数据库中,我有一个表 CREATE TABLE test ( id bigint, values dou
我是一名优秀的程序员,十分优秀!