小编Ram*_*esh的帖子

了解缓存,坚持使用Spark

任何人都可以纠正我对Spark坚持的理解.

如果我们在RDD上执行了cache(),则它的值仅缓存在最初计算RDD的那些节点上.含义,如果存在100个节点的集群,则在第一个和第二个节点的分区中计算RDD.如果我们缓存了这个RDD,那么Spark将仅在第一个或第二个工作节点中缓存它的值.因此,当此Spark应用程序尝试在后续阶段使用此RDD时,Spark驱动程序必须从第一个/第二个节点获取值.

我对么?

(要么)

是RDD值持久存储在驱动程序内存而不是节点上的东西吗?

apache-spark rdd apache-spark-sql

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

spark sql窗口函数滞后

我在Spark SQL,Scala中查看Spark DataFrame的窗口滑动功能.

我有一个数据框,列Col1,Col1,Col1,日期.

Col1    Col2    Col3    date     volume new_col
                        201601  100.5   
                        201602  120.6   100.5
                        201603  450.2   120.6
                        201604  200.7   450.2
                        201605  121.4   200.7`
Run Code Online (Sandbox Code Playgroud)

现在我想添加一个名为(new_col)的新列,其中一行向下滑动,如上所示.

我试过下面的选项来使用窗口功能.

val windSldBrdrxNrx_df = df.withColumn("Prev_brand_rx", lag("Prev_brand_rx",1))
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我如何做到这一点.

scala window-functions apache-spark apache-spark-sql

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

Spark数据帧过滤器

val df = sc.parallelize(Seq((1,"Emailab"), (2,"Phoneab"), (3, "Faxab"),(4,"Mail"),(5,"Other"),(6,"MSL12"),(7,"MSL"),(8,"HCP"),(9,"HCP12"))).toDF("c1","c2")

+---+-------+
| c1|     c2|
+---+-------+
|  1|Emailab|
|  2|Phoneab|
|  3|  Faxab|
|  4|   Mail|
|  5|  Other|
|  6|  MSL12|
|  7|    MSL|
|  8|    HCP|
|  9|  HCP12|
+---+-------+
Run Code Online (Sandbox Code Playgroud)

我想过滤出列'c2'的前三个字符"MSL"或"HCP"的记录.

所以输出应该如下所示.

+---+-------+
| c1|     c2|
+---+-------+
|  1|Emailab|
|  2|Phoneab|
|  3|  Faxab|
|  4|   Mail|
|  5|  Other|
+---+-------+
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮忙吗?

我知道df.filter($"c2".rlike("MSL"))- 这是为了选择记录,但如何排除记录.?

版本:Spark 1.6.2 Scala:2.10

scala apache-spark apache-spark-sql

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

火花数据帧组多次

val df = (Seq((1, "a", "10"),(1,"b", "12"),(1,"c", "13"),(2, "a", "14"),
              (2,"c", "11"),(1,"b","12" ),(2, "c", "12"),(3,"r", "11")).
          toDF("col1", "col2", "col3"))
Run Code Online (Sandbox Code Playgroud)

所以我有一个包含3列的火花数据帧.

我的要求实际上是我需要执行两个级别的groupby,如下所述.

Level1:如果我在col1上进行groupby并做一个Col3的总和.我将在两列以下.1. col1 2. sum(col3)我将在这里松开col2.

Level2:如果我想再次按col1和col2分组并做一个Col3的总和,我将得到3列以下.1. col1 2. col2 3. sum(col3)

我的要求实际上是我需要执行两个级别的groupBy并且在最后一个数据帧中具有这两个列(level1的sum(col3),level2的sum(col3)).

我怎么能这样做,谁能解释一下?

火花:1.6.2斯卡拉:2.10

scala apache-spark

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

Spark Dataframe的分区数

任何人都可以解释将为Spark Dataframe创建的分区数量.

我知道对于RDD,在创建它时我们可以提到下面的分区数量.

val RDD1 = sc.textFile("path" , 6) 
Run Code Online (Sandbox Code Playgroud)

但是对于Spark数据帧,在创建时看起来我们没有选择指定像RDD那样的分区数.

我认为只有在创建数据框架后我们可以使用重新分区API.

df.repartition(4)
Run Code Online (Sandbox Code Playgroud)

因此,如果我们可以在创建数据帧时指定分区数量,请​​告诉我们.

dataframe apache-spark apache-spark-sql

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

通过迭代Scala列名列表中的列,从Spark数据框中删除多个列

我有一个数据框,其列数约为400,我想根据我的要求删除100列.所以我创建了一个包含100个列名的Scala列表.然后我想迭代一个for循环来实际删除每个for循环迭代中的列.

下面是代码.

final val dropList: List[String] = List("Col1","Col2",...."Col100”)

def drpColsfunc(inputDF: DataFrame): DataFrame = { 
    for (i <- 0 to dropList.length - 1) {
        val returnDF = inputDF.drop(dropList(i))
    }
    return returnDF
}

val test_df = drpColsfunc(input_dataframe) 

test_df.show(5)
Run Code Online (Sandbox Code Playgroud)

scala apache-spark apache-spark-sql

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

独立集群中 Spark 应用程序的 Spark 驱动程序节点和工作程序节点

我想了解在提交 Spark 应用程序时哪个节点将充当驱动程序节点,哪个节点将充当工作节点?

例如,如果我有 3 个节点的独立集群。

当spark第一个应用程序(app1)提交时,spark框架会随机选择一个节点作为驱动节点,其他节点作为工作节点。这仅适用于 app1。在执行过程中,如果提交了另一个spark应用程序(app2),spark可以随机选择一个节点作为驱动节点,其他节点作为工作节点。这仅适用于 app2。因此,当两个 spark 应用程序都在执行时,可能会出现两个不同的节点可以成为主节点的情况。如有误解请指正。

scala apache-spark

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

Spark数据帧过滤空值和空格

我有一个spark数据帧,我需要为特定列过滤空值和空格.

可以说dataframe有两列.col2既有空值也有空格.

col1   col2
1      abc
2      null
3      null
4   
5      def
Run Code Online (Sandbox Code Playgroud)

我想应用过滤掉col2为空或空白的记录.任何人都可以帮忙解决这个问题.

版本:Spark1.6.2 Scala 2.10

scala apache-spark-sql

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

IntelliJ IDE Spark 项目中的 Java.lang.ClassNotFoundException:oracle.jdbc.driver.OracleDriver

您好,我在 Intelj IDE 中执行 Sparksql Job(读取 Oracle 表)时遇到以下问题。问题: Exception in thread "main" java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver at java.net.URLClassLoader.findClass(URLClassLoader.java:381)

我已经在 IntelliJIdea ProjectStructure==> 模块 ==> 依赖项 ==> + ==> 添加了 ojdbc7.jar 文件到我的项目中添加了 ojdbc7.jar 文件。

在 build.gradle 文件中我给出了以下声明。

“运行时文件('libs/ojdbc7.jar')”

编译项目后,我可以在项目中创建的 libs 文件夹中看到 jar 文件。

如果我在 IDE 中执行作业,我将面临这个问题。任何人都可以帮助我吗?

intellij-idea ojdbc apache-spark-sql

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

将 Spark Dataframes 的每一行转换为字符串,在 Scala 中的每列值之间有一个分隔符

我想将 Spark Dataframe 的每一行转换为一个字符串,每列值之间有一个分隔符。

例如:我有一个输入数据框“df”,其中包含 3 列“firstname”、“lastname”、“age”,其中有两条记录,如下所示。

第 1 行:约翰·艾布拉汉姆 21 第 2 行:史蒂夫·奥斯汀 22

我想创建一个只有一列的新数据框,其中包含如下数据。
第一行:约翰$阿布拉汉姆$21 第二行:史蒂夫$奥斯汀$22

任何人都可以帮忙做这件事。

scala apache-spark-sql

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