标签: apache-spark-sql

PySpark:DataFrame-将结构转换为数组

我有以下结构的数据框:

root
 |-- index: long (nullable = true)
 |-- text: string (nullable = true)
 |-- topicDistribution: struct (nullable = true)
 |    |-- type: long (nullable = true)
 |    |-- values: array (nullable = true)
 |    |    |-- element: double (containsNull = true)
 |-- wiki_index: string (nullable = true)
Run Code Online (Sandbox Code Playgroud)

我需要将其更改为:

root
 |-- index: long (nullable = true)
 |-- text: string (nullable = true)
 |-- topicDistribution: array (nullable = true)
 |    |--  element: double (containsNull = true)
 |-- wiki_index: string (nullable = …
Run Code Online (Sandbox Code Playgroud)

apache-spark apache-spark-sql pyspark spark-dataframe

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

Spark DataFrame - 使用Java API选择列列表

我正在尝试使用Java API从DataFrame中选择列列表.

示例Java代码:

List<String> colList = Arrays.asList(new String[] { "column1", "column2", "column3" });
df.selectExpr((String[])colList.toArray()).show();
Run Code Online (Sandbox Code Playgroud)

在Java API中,我必须使用selectExpr而不是select.有没有其他方法可以使用Java API选择列列表.

但是在Scala中,我可以做类似下面的事情.

示例Scala代码:

val colList = List("column1", "column2", "column3")
df.select(colList.head, colList.tail: _*).show
Run Code Online (Sandbox Code Playgroud)

java scala apache-spark apache-spark-sql

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

Spark SQL中整个代码生成的"阶段"如何与Spark Core的阶段相关?

我一直在探索Spark SQL中的全阶段代码生成优化(又称全阶段codegen),并且想知道"while-stage"中的"阶段"是多少来自Spark Core的一个阶段(Spark工作)的含义?

Spark SQL和Spark Core中的整个阶段代码阶段之间是否存在任何技术关系?或者它们是否更广泛地用于指计算中的"阶段"?

apache-spark apache-spark-sql

0
推荐指数
2
解决办法
951
查看次数

如何使用spark scala中的自定义分隔符(ctrl-A分隔)文件编写数据框/ RDD?

我在poc工作,我需要创建数据帧,然后将其保存为ctrl一个分隔文件.我创建中间结果的查询如下

val grouped = results.groupBy("club_data","student_id_add","student_id").agg(sum(results("amount").cast(IntegerType)).as("amount"),count("amount").as("cnt")).filter((length(trim($"student_id")) > 1) && ($"student_id").isNotNull)
Run Code Online (Sandbox Code Playgroud)

将结果保存在文本文件中

grouped.select($"club_data", $"student_id_add", $"amount",$"cnt").rdd.saveAsTextFile("/amit/spark/output4/")
Run Code Online (Sandbox Code Playgroud)

输出:

 [amit,DI^A356035,581,1]
Run Code Online (Sandbox Code Playgroud)

它以逗号分隔保存数据,但我需要将其保存为ctrl-A单独的I尝试选项("分隔符","\ u0001")但似乎不受dataframe/rdd支持.

有什么功能有帮助吗?

scala dataframe apache-spark apache-spark-sql

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

如何计算RDD [Long]的标准偏差和平均值?

RDD[Long]打电话mod,我想使用Spark 2.2和Scala 2.11.8计算此RDD的标准偏差和平均值.

我该怎么做?

我尝试按如下方式计算平均值,但有没有更简单的方法来获取这些值?

val avg_val = mod.toDF("col").agg(
    avg($"col").as("avg")
).first().toString().toDouble

val stddev_val = mod.toDF("col").agg(
    stddev($"col").as("avg")
).first().toString().toDouble
Run Code Online (Sandbox Code Playgroud)

scala apache-spark apache-spark-sql

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

如何将一个DataFrame中的多个列与另一个DataFrame连接起来

我有两个DataFrames推荐和电影.建议中的列rec1-rec3表示电影数据帧中的电影ID.

val recommendations: DataFrame = List(
        (0, 1, 2, 3),
        (1, 2, 3, 4),
        (2, 1, 3, 4)).toDF("id", "rec1", "rec2", "rec3")

val movies = List(
        (1, "the Lord of the Rings"),
        (2, "Star Wars"),
        (3, "Star Trek"),
        (4, "Pulp Fiction")).toDF("id", "name")
Run Code Online (Sandbox Code Playgroud)

我想要的是:

+---+------------------------+------------+------------+
| id|                    rec1|        rec2|        rec3|
+---+------------------------+------------+------------+
|  0|   the Lord of the Rings|   Star Wars|   Star Trek|
|  1|               Star Wars|   Star Trek|Pulp Fiction|
|  2|   the Lord of the Rings|   Star Trek|   Star Trek|
+---+------------------------+------------+------------+
Run Code Online (Sandbox Code Playgroud)

scala apache-spark apache-spark-sql

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

Apache Spark-将CSV数据加载到数据集的通用方法

我想用三个输入参数编写通用方法:

  1. filePath-字符串
  2. 模式-?
  3. 案例类

因此,我的想法是编写这样的方法:

def load_sms_ds(filePath: String, schemaInfo: ?, cc: ?) = {
  val ds = spark.read
    .format("csv")
    .option("header", "true")
    .schema(?)
    .option("delimiter",",")
    .option("dateFormat", "yyyy-MM-dd HH:mm:ss.SSS")
    .load(schemaInfo)
    .as[?]

   ds
}
Run Code Online (Sandbox Code Playgroud)

并根据输入参数返回数据集。我不确定参数schemaInfo和cc应该是哪种类型?

scala apache-spark apache-spark-sql spark-dataframe

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

如何从数据帧中获取特定列中具有最大值的行?

我有这样的数据帧

    df.show(5)
    kv   |list1     |list2                |p
   [k1,v2|[1,2,5,9  |[5,1,7,9,6,3,1,4,9]  |0.5
   [k1,v3|[1,2,5,8,9|[5,1,7,9,6,3,1,4,15] |0.9
   [k2,v2|[77,2,5,9]|[0,1,8,9,7,3,1,4,100]|0.01
   [k5,v5|[1,0,5,9  |[5,1,7,9,6,3,1,4,3]  |0.3
   [k9,v2|[1,2,5,9  |[5,1,7,9,6,3,1,4,200]|2.5
   df.count()
   5200158
Run Code Online (Sandbox Code Playgroud)

我想获得最大p的行,这对我来说很有用,但我不知道是否有另一种清洁方式

     val f = df.select(max(struct(
    col("pp") +: df.columns.collect { case x if x != "p" => col(x) }: _*
  ))).first()
Run Code Online (Sandbox Code Playgroud)

scala apache-spark apache-spark-sql spark-dataframe

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

如何从Scala自定义对象列表创建数据框

我们可以使用以下方法从Java对象列表中创建一个数据框:

DataFrame df = sqlContext.createDataFrame(list, Example.class);
Run Code Online (Sandbox Code Playgroud)

对于Java,Spark可以直接从类(在这种情况下)推断模式Example.class

如果有Scala,有没有办法做同样的事情?

scala dataframe apache-spark apache-spark-sql

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

如何使用Java将Spark数据集的所有列转换为字符串

我有一个包含这么多列的数据集,我想使用Java将所有列都转换为字符串。

我尝试了以下步骤,我想知道是否有更好的方法来实现这一目标?

Dataset<Row> ds = ...;
JavaRDD<String[]> stringArrRDD = ds.javaRDD().map(row->{
          int length = row.length();
          String[] columns = new String[length];
          for(int i=0; i<length;i++){
              columns[i] = row.get(i) !=null? row.get(i).toString():"";
          }
       return  columns;});
Run Code Online (Sandbox Code Playgroud)

java dataframe apache-spark apache-spark-sql

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