相关疑难解决方法(0)

Spark的内部工作

现在Spark正在进行中.Spark使用scala语言来加载和执行程序以及python和java.RDD用于存储数据.但是,我无法理解Spark的架构,它是如何在内部运行的.

请告诉我Spark Architecture以及它如何在内部工作?

apache-spark

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

如何在DataFrames中将列类型从String更改为Date?

我有一个数据框有两列(C,D)被定义为字符串列类型,但列中的数据实际上是日期.例如,列C的日期为"01-APR-2015",列D的日期为"20150401"我想更改这些日期列类型,但我没有找到一个好方法.我看一下我需要在Spark SQL的DataFrame中将字符串列类型转换为Date列类型的堆栈溢出.日期格式可以是"01-APR-2015",我查看这篇文章,但它没有与日期相关的信息

scala apache-spark apache-spark-sql

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

Spark 和 Scala 中数据框的转换模式

我想转换数据框的模式以使用 Spark 和 Scala 更改某些列的类型。

具体来说,我试图使用 as[U] 函数,其描述为:“返回一个新的数据集,其中每个记录都已映射到指定的类型。用于映射列的方法取决于 U 的类型

原则上这正是我想要的,但我无法让它工作。

这是一个来自https://github.com/apache/spark/blob/master/sql/core/src/test/scala/org/apache/spark/sql/DatasetSuite.scala的简单示例



    // definition of data
    val data = Seq(("a", 1), ("b", 2)).toDF("a", "b")

Run Code Online (Sandbox Code Playgroud)

正如预期的那样,数据模式是:

    根
     |-- a: 字符串 (nullable = true)
     |-- b:整数(可为空 = false)
    

我想将列“b”转换为 Double。所以我尝试以下操作:



    import session.implicits._;

    println(" --------------------------- Casting using (String Double)")

    val data_TupleCast=data.as[(String, Double)]
    data_TupleCast.show()
    data_TupleCast.printSchema()

    println(" --------------------------- Casting using ClassData_Double")

    case class ClassData_Double(a: String, b: Double)

    val data_ClassCast= data.as[ClassData_Double]
    data_ClassCast.show()
    data_ClassCast.printSchema()

Run Code Online (Sandbox Code Playgroud)

据我了解 as[u] 的定义,新的 DataFrame 应具有以下架构

    根
     |-- a: 字符串 …

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

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

Scala&Spark:一次投射多个列

由于VectorAssembler崩溃,如果传递的列具有除NumericTypeor 之外的任何其他类型BooleanType并且我正在处理许多TimestampType列,我想知道:

有一种简单的方法,一次投下多个列吗?

根据这个答案,我已经有了一个方便的方法来构建一个列:

def castColumnTo(df: DataFrame, 
    columnName: String, 
    targetType: DataType ) : DataFrame = {
      df.withColumn( columnName, df(columnName).cast(targetType) )
}
Run Code Online (Sandbox Code Playgroud)

我想过castColumnTo递归调用,但我强烈怀疑这是(高效)的方式.

scala apache-spark

5
推荐指数
2
解决办法
4740
查看次数

如何将csv直接加载到Spark数据集中?

我有一个csv文件[1],我想直接加载到数据集中.问题是我总是得到错误

org.apache.spark.sql.AnalysisException: Cannot up cast `probability` from string to float as it may truncate
The type path of the target object is:
- field (class: "scala.Float", name: "probability")
- root class: "TFPredictionFormat"
You can either add an explicit cast to the input data or choose a higher precision type of the field in the target object;
Run Code Online (Sandbox Code Playgroud)

而且,特别是对于该phrases领域(检查案例类[2]),它得到了

org.apache.spark.sql.AnalysisException: cannot resolve '`phrases`' due to data type mismatch: cannot cast StringType to ArrayType(StringType,true);
Run Code Online (Sandbox Code Playgroud)

如果我将我的case类[2]中的所有字段定义为String类型,那么一切正常,但这不是我想要的.有没有一种简单的方法可以做到[3]?


参考

[1]一个示例行

B017NX63A2,Merrell,"['merrell_for_men', 'merrell_mens_shoes', 'merrel']",merrell_shoes,0.0806054356579781
Run Code Online (Sandbox Code Playgroud)

[2]我的代码片段如下 …

scala apache-spark apache-spark-sql

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

以迭代方式更改列类型 Spark 数据帧

我在 Scala 中有一个列名列表,例如

var cols = List("col1", "col2", "col3","col4")
Run Code Online (Sandbox Code Playgroud)

我还有一个包含这些列的数据框,但都是字符串。现在我想通过遍历数据框的列表或列来转换数据框的列,因为我的列列表非常大,我无法使用这么多.withColumn参数

提前致谢

dataframe apache-spark apache-spark-sql

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

在约束条件下将Apache Spark(Scala)数据框中的布尔列转换为数值列?

 val inputfile = sqlContext.read
        .format("com.databricks.spark.csv")
        .option("header", "true") 
        .option("inferSchema", "true") 
        .option("delimiter", "\t")
        .load("data")
 inputfile: org.apache.spark.sql.DataFrame = [a: string, b: bigint, c: boolean]
 val outputfile = inputfile.groupBy($"a",$"b").max($"c")
Run Code Online (Sandbox Code Playgroud)

上面的代码失败,因为它c是一个布尔变量,并且聚合不能应用于布尔值。是否有火花功能转换true价值来1false0了星火数据帧的整列。

我尝试了以下操作(源:如何在Spark SQL的DataFrame中更改列类型?

 val inputfile = sqlContext.read
        .format("com.databricks.spark.csv")
        .option("header", "true") 
        .option("inferSchema", "true") 
        .option("delimiter", "\t")
        .load("data")
 val tempfile =inputfile.select("a","b","c").withColumn("c",toInt(inputfile("c")))   
 val outputfile = tempfile.groupBy($"a",$"b").max($"c")
Run Code Online (Sandbox Code Playgroud)

以下问题:为PySpark在DataFrame中从布尔值转换为整数答案的新派生列,但我想要一个专门用于Scala的函数。

感谢任何帮助。

scala spark-dataframe

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