标签: apache-spark-sql

Spark SQL中如何获取列的数据类型?

我想找出表中每一列的数据类型?

例如,假设我的表是使用以下命令创建的:

create table X
(
col1 string,
col2 int,
col3 int
)
Run Code Online (Sandbox Code Playgroud)

我想做一个会输出如下内容的命令:

column datatype
col1  string
col2  int
Run Code Online (Sandbox Code Playgroud)

有这个命令吗?最好是在 SparkSQL 中。但是,如果没有,那么如何使用其他方式获取这些数据呢?我正在使用 Spark sql 查询 Hive 表。也许通过 HIVE 中的元数据?谢谢。

hive apache-spark apache-spark-sql

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

将 Hive 行对象转换为整数 Spark

我正在尝试将配置单元列的输出转换为键值对。

sqlContext = HiveContext(sc)
id1 = sqlContext.sql("select instance_id from temp_table")
pairs1 = id1.map(lambda s: (int(s), 'Configuration'))
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

TypeError: int() argument must be a string or a number, not 'Row'
Run Code Online (Sandbox Code Playgroud)

我不确定如何将 Hive Row 对象类型转换为整数,以便我可以对其应用映射函数

例如, id1 是一个数据框,当我对其应用collect() 时,它会返回

[Row(_c0=12616821)]
Run Code Online (Sandbox Code Playgroud)

我需要从行对象中提取值。请告诉我是否有与此问题相关的解决方案

python hive apache-spark apache-spark-sql pyspark

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

将 RDD 作为参数传递并将数据帧返回给函数 - scala

我正在尝试创建将字符串或 RDD 作为参数但返回数据帧的函数。

代码:

def udf1 (input: String) = {
  val file = sc.textFile(input);
  file.map(p => Person(
    (p.substring(1, 15)),
     p.substring(16, 20))).toDF()  
}

def main() { 
  case class Person(id: String, name: String)     
  val df1 = udf1 ("hdfs:\\")
}
Run Code Online (Sandbox Code Playgroud)

但它总是返回rdd。有什么建议么?

scala apache-spark apache-spark-sql

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

Spark:是否有任何方法可以对不区分大小写的列进行排序(sort或orderBy)

我需要以不区分大小写的方式对行进行排序。

我有这样的数据:

+---+---------------+--------------------+--------------------+------+--------------+
| id|      full_name|           job_title|               email|gender|    ip_address|
+---+---------------+--------------------+--------------------+------+--------------+
| 73|     Tina Mccoy|Desktop Support T...|tmccoy20@techcrun...|Female| 23.196.170.54|
| 74|      Lois Hart|        Food Chemist|lhart21@mapquest.com|Female| 145.52.30.236|
| 75|    Thomas Hall|    Senior Developer|   thall22@wired.com|  Male|76.255.197.231|
| 76|  Ernest Romero|             Teacher|eromero23@amazon....|  Male|  99.21.57.239|
| 77|  Irene Bradley| Assistant Professor|ibradley24@squido...|Female| 16.51.179.230|
| 78|Jacqueline Cruz|account Represent...|     jcruz25@cdc.gov|Female| 167.49.98.213|
| 79|    Sara Martin|        Geologist IV|    smartin26@a8.net|Female| 10.145.49.204|
| 80| Johnny Bradley| Executive Secretary|jbradley27@cocolo...|  Male| 138.251.4.102|
| 81|      Fred Dean|Nuclear Power Eng...|fdean28@kickstart...|  Male| 173.10.122.12|
| 82|   Ralph Greene| …
Run Code Online (Sandbox Code Playgroud)

apache-spark apache-spark-sql

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

在 Spark SQL DataFrame 中调用 UDF 方法内的其他方法/变量

我有一个 Spark SQL DF,我在其中尝试调用一个 UDF [我使用 Spark SQL 创建的udf

val udfName = udf(somemethodName)
val newDF = df.withColumn("columnnew", udfName(col("anotherDFColumn"))
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用另一个存储为valsomemethodName 内部的 DF,但 DF 为空。

仅当我在 . 中使用 where 子句时才会发生这种情况newDF

我错过了什么吗?是否无法在 UDF 方法中使用另一个变量/方法?

或者我必须对广播做些什么?目前我正在本地运行它,而不是在集群中。

scala apache-spark apache-spark-sql udf

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

了解 Spark SQL 的一些基础知识

我正在关注http://spark.apache.org/docs/latest/sql-programming-guide.html

输入后:

val df = spark.read.json("examples/src/main/resources/people.json")

// Displays the content of the DataFrame to stdout
df.show()
// +----+-------+
// | age|   name|
// +----+-------+
// |null|Michael|
// |  30|   Andy|
// |  19| Justin|
// +----+-------+
Run Code Online (Sandbox Code Playgroud)

我有一些问题没有看到答案。

首先,什么是 $ 符号?如在

 df.select($"name", $"age" + 1).show()
Run Code Online (Sandbox Code Playgroud)

其次,我可以只从第二行获取数据吗(而且我不知道第二行的数据是什么)。

第三,如何使用 Spark sql 读取彩色图像?

第四,我仍然不确定spark中的数据集和数据帧之间有什么区别。变量 df 是一个数据帧,那么我可以将“Michael”更改为整数 5 吗?我可以在数据集中做到这一点吗?

scala apache-spark apache-spark-sql apache-spark-dataset

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

线程“main”中的异常 java.lang.NoSuchMethodError: org.apache.commons.beanutils.PropertyUtilsBean

我正在尝试读取属性文件,但遇到了下面给出的错误。我编写了一个 Scala 包,我正在尝试读取属性文件并调用 abc.scala 程序。任何帮助将不胜感激。

文件:- xyz.properties

driver = "oracle.jdbc.driver.OracleDriver"
url = "jdbc:oracle:thin:@xxxx:1521/xxxx.xxxx"
username = "xxx"
password = "xxx"
input_file = "C:\\Users\\xxx\\test\\src\\main\\resources\\xxxx.xlsx"
Run Code Online (Sandbox Code Playgroud)

构建.sbt

name := "xxx.xxxx.xxxxx"

scalaVersion := "2.10.6"

ivyScala := ivyScala.value map{ _.copy(overrideScalaVersion = true) }


libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "2.1.0",
"com.databricks" %% "spark-csv" % "1.5.0",
"org.apache.commons" % "commons-configuration2" % "2.1.1",
"commons-beanutils" % "commons-beanutils" % "1.9.3",
"org.apache.spark" %% "spark-sql" % "2.1.0",
"org.scala-lang" % "scala-xml" % "2.11.0-M4"  )
Run Code Online (Sandbox Code Playgroud)

包裹

package com.xxx.zzzz.xxx1

        import java.io.File
        import org.apache.commons.configuration2.builder.fluent.{Configurations, Parameters}


        object …
Run Code Online (Sandbox Code Playgroud)

scala apache-spark apache-spark-sql

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

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

使用 Spark 从 teradata 表读取数据时出现 ExceptionInInitializer 错误

我使用下面的代码从 teradata 读取数据但出现错误

val jdbcDF = spark.read
  .format("jdbc")
  .option("url",s"jdbc:teradata://${TeradataDBHost}/database=${TeradataDBDatabase}")
  .option("dbtable", TeradataDBDatabase+"."+TeradataDBTable)
  .option("driver","com.teradata.jdbc.TeraDriver")
  .option("user", TeradataDBUsername)
  .option("password", TeradataDBPassword)
  .load()
Run Code Online (Sandbox Code Playgroud)

错误堆栈跟踪

val jdbcDF = spark.read
  .format("jdbc")
  .option("url",s"jdbc:teradata://${TeradataDBHost}/database=${TeradataDBDatabase}")
  .option("dbtable", TeradataDBDatabase+"."+TeradataDBTable)
  .option("driver","com.teradata.jdbc.TeraDriver")
  .option("user", TeradataDBUsername)
  .option("password", TeradataDBPassword)
  .load()
Run Code Online (Sandbox Code Playgroud)

jdbc teradata apache-spark apache-spark-sql

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

在spark-SQL而不是spark-scala中创建“临时”表?

我已经从输入文件加载了一个表。

CREATE TABLE MyTable (
    ID INT,
    VALUE FLOAT,
    RATE  INT
...

LOAD DATA LOCAL INPATH 'MYPATH' INTO TABLE MyTable;
Run Code Online (Sandbox Code Playgroud)

现在我想基于这个创建一个新的

DerivedTable = 
    SELECT ID, VALUE*RATE AS Total
    FROM MyTable
    WHERE VALUE IS NOT NULL;
Run Code Online (Sandbox Code Playgroud)

然后我将使用该表作为其他表和输出的源。

创建此“临时”表的正确 Sql(或 Hive)方法是什么?这应该适用于spark-sql

PS:我知道如何在 Spark-Shell 中做到这一点。但这不是我要找的。

hiveql apache-spark apache-spark-sql

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