Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Spark sql:带有大小写和数千列的查询_Mysql_Apache Spark_Apache Spark Sql_Cloudera Cdh - Fatal编程技术网

Mysql Spark sql:带有大小写和数千列的查询

Mysql Spark sql:带有大小写和数千列的查询,mysql,apache-spark,apache-spark-sql,cloudera-cdh,Mysql,Apache Spark,Apache Spark Sql,Cloudera Cdh,我有一张有两千列的表。我需要根据标志列修改一些列数据 tableSchemaRDD.registerAsTable("customer") var results = sqlContext.sql("select *,case when flag1 = 'A' then null else charges end as charges, flag2 = 'B' then null then else stax end as stax from customer") flag1、flag2、

我有一张有两千列的表。我需要根据标志列修改一些列数据

tableSchemaRDD.registerAsTable("customer")
var results = sqlContext.sql("select *,case when flag1 = 'A' then null else charges end as charges, flag2 = 'B' then null then else stax end as stax from customer")  
flag1、flag2、charges、stax是我表格中的列。上面的代码将提供额外的两个coumn以及原始列。如何根据标志列获取所有具有修改列(费用、stax)的列

不要使用星号(*),实际上星号告诉您必须带上所有列,然后您将使用负责两个新列的两个案例。您只需删除星号(*),并将列名以逗号分隔,而不包含要修改的列名。这样就不会显示这两个旧列。 如果您使用的是Spark 1.3,那么对于DataFrame来说非常容易,比如

val columsNames = df.schema.fieldNames
  .filter(fieldName => {
    !fieldName.equals("charges") && !fieldName.equals("stax")
  }).mkString(",")
不要完全记住SchemaRDD中是否有方法/属性

编辑: 请理解这个问题,星号告诉你带上所有的旧列,然后你使用两个新的案例(两个新的列)。另外,在你的场景中,你必须指定列,列的名称不含费用和stax,因为这些是你的新列,它们将由案例填充

假设您有一个表customer,它有4列,id name charges stax,并且您像编写查询一样编写查询

选择*,当flag1='A'然后null else费用作为费用结束,flag2='B'然后null然后else stax结束作为客户的stax结束时的情况

这将为您提供6列,4列表示星号(*),因为表中有四列。你的案子有两个。除了星号(*),您必须像

select id , name ,case when flag1 = 'A' then null else charges end as charges, flag2 = 'B' then null then else stax end as stax from customer
这将导致4列,id,name原样(旧)。您的案件的Stax和费用(新)结果


希望这会有所帮助。

出现了非常非常严重的问题。您能发布什么是表结构以及您期望的输出吗?您使用的是哪种spark版本?我使用的是spark 1.2。没问题,如果您知道架构,即列名,那么只需使用逗号分隔的名称,而不是星号。看我编辑的帖子。你也可以用schemaRDD做同样的事情。我也检查过了,