小编hp2*_*326的帖子

Spark Struct结构域名称在UDF中更改

我试图将一个struct in spark传递给udf.它正在更改字段名称并重命名为列位置.我如何解决它?

object TestCSV {

          def main(args: Array[String]) {

            val conf = new SparkConf().setAppName("localTest").setMaster("local")
            val sc = new SparkContext(conf)
            val sqlContext = new SQLContext(sc)


            val inputData = sqlContext.read.format("com.databricks.spark.csv")
                  .option("delimiter","|")
                  .option("header", "true")
                  .load("test.csv")


            inputData.printSchema()

            inputData.show()

            val groupedData = inputData.withColumn("name",struct(inputData("firstname"),inputData("lastname")))

            val udfApply = groupedData.withColumn("newName",processName(groupedData("name")))

           udfApply.show()
          }



             def processName = udf((input:Row) =>{

                println(input)
                println(input.schema)

                Map("firstName" -> input.getAs[String]("firstname"), "lastName" -> input.getAs[String]("lastname"))

              })

        }
Run Code Online (Sandbox Code Playgroud)

输出:

 root
 |-- id: string (nullable = true)
 |-- firstname: string (nullable = true)
 |-- lastname: string (nullable = true) …
Run Code Online (Sandbox Code Playgroud)

struct apache-spark udf

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

如何修复命名空间 [非默认命名空间] 中名称为 [spark-wordcount-driver] 的种类 [pod] 的操作 [get] 失败

我正在尝试在 Kubernetes 上的 Spark 中运行一个简单的 wordcount 应用程序。我遇到以下问题。

Caused by: io.fabric8.kubernetes.client.KubernetesClientException: Operation: [get]  for kind: [Pod]  with name: [spark-wordcount-1545506479587-driver]  in namespace: [non-default-namespace]  failed.
    at io.fabric8.kubernetes.client.KubernetesClientException.launderThrowable(KubernetesClientException.java:62)
    at io.fabric8.kubernetes.client.KubernetesClientException.launderThrowable(KubernetesClientException.java:71)
    at io.fabric8.kubernetes.client.dsl.base.BaseOperation.getMandatory(BaseOperation.java:228)
    at io.fabric8.kubernetes.client.dsl.base.BaseOperation.get(BaseOperation.java:184)
    at org.apache.spark.scheduler.cluster.k8s.ExecutorPodsAllocator$$anonfun$1.apply(ExecutorPodsAllocator.scala:57)
    at org.apache.spark.scheduler.cluster.k8s.ExecutorPodsAllocator$$anonfun$1.apply(ExecutorPodsAllocator.scala:55)
    at scala.Option.map(Option.scala:146)
    at org.apache.spark.scheduler.cluster.k8s.ExecutorPodsAllocator.<init>(ExecutorPodsAllocator.scala:55)
    at org.apache.spark.scheduler.cluster.k8s.KubernetesClusterManager.createSchedulerBackend(KubernetesClusterManager.scala:89)
    at org.apache.spark.SparkContext$.org$apache$spark$SparkContext$$createTaskScheduler(SparkContext.scala:2788)
    ... 20 more
Caused by: java.net.SocketTimeoutException: connect timed out
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
Run Code Online (Sandbox Code Playgroud)

我已按照RBAC 设置中提到的所有步骤进行操作。我唯一不能做的是我无法创建集群绑定 spark-role,因为我无权访问默认命名空间。相反,我创建了角色绑定。

kubectl create rolebinding spark-role --clusterrole=edit --serviceaccount=non-default-namespace:spark --namespace=non-default-namespace
Run Code Online (Sandbox Code Playgroud)

我正在使用以下 spark-submit 命令。

spark-submit \
 --verbose \
 --master …
Run Code Online (Sandbox Code Playgroud)

docker apache-spark kubernetes kube-dns

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

标签 统计

apache-spark ×2

docker ×1

kube-dns ×1

kubernetes ×1

struct ×1

udf ×1