我想找出表中每一列的数据类型?
例如,假设我的表是使用以下命令创建的:
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 中的元数据?谢谢。
我正在尝试将配置单元列的输出转换为键值对。
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)
我需要从行对象中提取值。请告诉我是否有与此问题相关的解决方案
我正在尝试创建将字符串或 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。有什么建议么?
我需要以不区分大小写的方式对行进行排序。
我有这样的数据:
+---+---------------+--------------------+--------------------+------+--------------+
| 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) 我有一个 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 方法中使用另一个变量/方法?
或者我必须对广播做些什么?目前我正在本地运行它,而不是在集群中。
我正在关注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 包,我正在尝试读取属性文件并调用 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) 例如生成1G记录,其序号在1到1G之间。
我使用下面的代码从 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) 我已经从输入文件加载了一个表。
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 中做到这一点。但这不是我要找的。