小编Lir*_*nBo的帖子

正则表达式用逗号表示十进制数

我在寻找包含逗号分隔符的十进制数的正确正则表达式时遇到了麻烦.

我确实在一般情况下找到了一些关于这个问题的其他问题,但是当我测试它们时,没有一个答案真的起作用

到目前为止我得到的最好的是:

[0-9]{1,3}(,([0-9]{3}))*(.[0-9]+)?
Run Code Online (Sandbox Code Playgroud)

到目前为止2个主要问题:

1)它记录数字之间的空格"3001 1"而不是将它们分成2个匹配"3001""1" - 我真的没有看到我在正则表达式中允许空格的位置.

2)我对正则表达式的开头\结尾有一个普遍的问题.

正则表达式应匹配:

3,001
1
32,012,111.2131 
Run Code Online (Sandbox Code Playgroud)

但不是:

32,012,11.2131
1132,012,111.2131
32,0112,111.2131
32131
Run Code Online (Sandbox Code Playgroud)

另外我想要匹配:

1.(without any number after it)
1,(without any number after it)
as 1
Run Code Online (Sandbox Code Playgroud)

(应忽略数字末尾的逗号或点).

非常感谢!.

regex decimal comma

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

spark 如何从 JSON 推断数字类型?

试图从一个 JSON 文件创建一个 DataFrame,但是当我加载数据时,spark 自动推断数据中的数值是 Long 类型,尽管它们实际上是整数,这也是我在代码中解析数据的方式。

由于我在测试环境中加载数据,因此我不介意使用一些解决方法来修复架构。我已经尝试了不止一些,例如:

  • 手动更改架构
  • 使用 UDF 投射数据
  • 手动定义整个架构

问题是模式非常复杂,我所追求的字段是嵌套的,这使得上述所有选项都无关紧要,或者太复杂而无法从头开始编写。

我的主要问题是,spark 如何确定数值是整数还是长整数?我能做些什么来强制所有\某些数字都属于特定类型?

谢谢!

json scala apache-spark spark-dataframe

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

使用ArrayType的Spark UDAF作为bufferSchema性能问题

我正在研究一个返回元素数组的UDAF.

每次更新的输入都是索引和值的元组.

UDAF的作用是对同一索引下的所有值求和.

例:

对于输入(索引,值):( 2,1),(3,1),(2,3)

应该返回(0,0,4,1,...,0)

逻辑工作正常,但我有更新方法的问题,我的实现只更新每行1个单元格,但该方法中的最后一个赋值实际上复制整个数组 - 这是多余的,非常耗时.

仅此分配负责我的查询执行时间的98%.

我的问题是,我怎样才能缩短那段时间?是否可以在缓冲区数组中分配1个值而无需替换整个缓冲区?

PS:我正在使用Spark 1.6,我不能很快升级它,所以请坚持使用适用于此版本的解决方案.

class SumArrayAtIndexUDAF() extends UserDefinedAggregateFunction{

  val bucketSize = 1000

  def inputSchema: StructType =  StructType(StructField("index",LongType) :: StructField("value",LongType) :: Nil)

  def dataType: DataType = ArrayType(LongType)

  def deterministic: Boolean = true

  def bufferSchema: StructType = {
    StructType(
      StructField("buckets", ArrayType(LongType)) :: Nil  
    )
  }

  override def initialize(buffer: MutableAggregationBuffer): Unit = {
    buffer(0) = new Array[Long](bucketSize)
  }

  override def update(buffer: MutableAggregationBuffer, input: Row): Unit = …
Run Code Online (Sandbox Code Playgroud)

performance scala user-defined-functions apache-spark apache-spark-sql

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

创建 SparkSession,master 设置为 k8s

正在为基于 K8s 的 Spark 开发 POC(Spark 版本 2.4.4)。

我能够使用 Spark-submit 调用 Spark 作业:

bin/spark-submit --master k8s://https://localhost:8443 --deploy-mode cluster --conf spark.executor.instances=5 --conf spark.kubernetes.authenticate.driver.serviceAccountName=spark --conf spark.kubernetes.container.image=liranbo/k8s-test4:latest --class org.apache.spark.examples.SparkPi --name spark-pi local:///opt/spark/examples/jars/spark-examples_2.11-2.4.4.jar 40
Run Code Online (Sandbox Code Playgroud)

尝试使用 SparkSession 构建器以编程方式执行相同的操作。

SparkSession.builder().appName(appName).master("k8s://https://localhost:8443")
Run Code Online (Sandbox Code Playgroud)

我收到以下异常

org.apache.spark.SparkException: Could not parse Master URL: 'k8s://https://localhost:8443'
at org.apache.spark.SparkContext$.org$apache$spark$SparkContext$$createTaskScheduler(SparkContext.scala:2784)
at org.apache.spark.SparkContext.<init>(SparkContext.scala:493)
at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2520)
at org.apache.spark.sql.SparkSession$Builder.$anonfun$getOrCreate$5(SparkSession.scala:935)
at scala.Option.getOrElse(Option.scala:138)
at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:926)
at SparkPi.startBySparkSessionBuilder(SparkPi.java:46)
at Runner.main(Runner.java:9)
Run Code Online (Sandbox Code Playgroud)

使用SparkSession时是否可以将master url设置为K8s?如果不是,为什么 Spark-Submit 支持?

顺便说一句:我能够使用SparkLauncher以编程方式启动应用程序,但这不是我想要的解决方案。

我在sparkPy中看到了一个(可能)工作示例。

apache-spark kubernetes

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