scala/park中的数据转换

scala/park中的数据转换,scala,apache-spark,Scala,Apache Spark,sumprice groupbybrand 挑战 brand,month,price abc,jan, - \n abc,feb, 29 \n abc,mar, - \n abc,apr, 45.23 \n bb-c,jan, 34 \n bb-c,feb,-35 \n bb-c,mar, - \n -将csv文件读取到df1 -将价格数据类型字符串更改为double -已在df1上创建注册的临时表 -但仍然面临着修剪和修剪的问题 -将非数字替换为零 有人能帮我解决这个问题吗。理

sumprice groupbybrand

挑战

brand,month,price
abc,jan, - \n 
abc,feb, 29  \n
abc,mar, -   \n
abc,apr, 45.23  \n
bb-c,jan, 34  \n
bb-c,feb,-35  \n
bb-c,mar, - \n
-将csv文件读取到df1 -将价格数据类型字符串更改为double -已在df1上创建注册的临时表 -但仍然面临着修剪和修剪的问题 -将非数字替换为零

有人能帮我解决这个问题吗。

理论解释:

简单地使用sqlContext读取csv文件,使用regexp_replace内置函数替换字符串以加倍强制转换和groupBy以及sum聚合,应该可以获得所需的输出

以编程方式解释:


我希望答案是有帮助的

输入文件如下:品牌、月份、价格abc,一月,-abc,二月,29 abc,三月,-abc,四月,45.23 bb-c,一月,34 bb-c,二月,-35 bb-c,三月,-你能用你所做的所有事情更新吗-将csv文件读取到df1-将价格数据类型字符串更改为在df1上双重创建的注册临时表-但仍面临修剪问题-将非数字字符串的零替换为快速回复。。。我尝试了df.translate、df.regexp_replace,还尝试了寄存器临时表…您好,我使用了此代码,但问题是价格列XL表包含逗号1345,因为如果价格超过999,则此代码将其设置为空。请建议克服这个问题,然后在正则表达式中加入逗号,如[\\s+a-zA-Z-:,],如果我用替换,然后执行你的代码,你应该很好。。。非常感谢你的帮助。很高兴听到@chalapathipothuraju
1)csv file available in xl sheet
2)trim the extra spaces in price
3)replace non-numeric(" -   ") with zero
4)sum the price group by brand
//1)csv file available in xl sheet
val df = sqlContext
  .read
  .format("com.databricks.spark.csv")
  .option("header", true)
  .load("path to the csv file")

df.show(false)
  //+-----+-----+------+
  //|brand|month|price |
  //+-----+-----+------+
  //|abc  |jan  | -    |
  //|abc  |feb  | 29   |
  //|abc  |mar  | -    |
  //|abc  |apr  | 45.23|
  //|bb-c |jan  | 34   |
  //|bb-c |feb  |-35   |
  //|bb-c |mar  | -    |
  //+-----+-----+------+  

import org.apache.spark.sql.functions._
//2)trim the extra spaces in price
//3)replace non-numeric(" -   ") with zero
df.withColumn("price", regexp_replace(col("price"), "[\\s+a-zA-Z- :]", "").cast("double"))
//4)sum the price group by brand    
    .groupBy("brand")
    .agg(sum("price").as("price_sum"))
    .show(false)
//+-----+-----------------+
//|brand|price_sum        |
//+-----+-----------------+
//|abc  |74.22999999999999|
//|bb-c |69.0             |
//+-----+-----------------+