我在数据块上运行一个 sql 笔记本。我想分析一个包含 50 亿条记录的表。我可以对数据运行简单的 sql 查询。但是,我需要将日期列类型从 str 更改为 date。
不幸的是,sparkSQL 似乎不支持更新/更改语句,因此我似乎无法修改表中的数据。
允许我在下一个单元格中将 SQL 表转换为 python 数据结构(在 pyspark 中)的一行代码是什么? 然后我可以修改文件并将其返回给 SQL。
我正在使用 Databricks 运行 Spark 集群。我想使用 curl 从服务器传输数据。例如,
curl -H "Content-Type: application/json" -H "auth:xxxx" -X GET "https://websites.net/Automation/Offline?startTimeInclusive=201609240100&endTimeExclusive=201609240200&dataFormat=json" -k > automation.json
Run Code Online (Sandbox Code Playgroud)
如何在 Databricks 笔记本中执行此操作(最好使用 python,但 Scala 也可以)?
请注意,这个问题是不是一个重复这一个!我不使用 Spark SQL 进行分区!我正在保存单个镶木地板文件!
我也在使用不支持 Hive-flavored SQL 的Databricks。
我在 Hive 中有一个表(我使用的是 Databricks),它包含两个分区。它看起来像这样:
CREATE TABLE foo_test (`col0` STRING, `col1` STRING, `col2` STRING, `datestamp` STRING)
USING parquet
OPTIONS (
`serialization.format` '1'
)
PARTITIONED BY (datestamp)
Run Code Online (Sandbox Code Playgroud)
编辑: *这也是调用的结果show create table foo_test;
我手动添加了两个带有 Spark 的分区到这个表中:
df = spark.read.csv(file_path.format(datestamp), header=True, inferSchema=True)
partitionPath = "/mnt/foo_test/datestamp={}/".format(datestamp)
df.coalesce(1).write.parquet(partitionPath, mode="overwrite")
/mnt/foo_test/datestamp=20180101/
/mnt/foo_test/datestamp=20180102/
Run Code Online (Sandbox Code Playgroud)
如果我用 Spark 加载数据,我可以看到它在那里:
spark.read.option("mergeSchema", True).parquet("/mnt/foo_test").show()
+----+----+----+----+---------+
|col0|col1|col2|col3|datestamp|
+----+----+----+----+---------+
| foo| bar| baz| 1| 20180102|
| xul| qux| wom| …Run Code Online (Sandbox Code Playgroud) 我有一个 DataFrame ( df),它由 50 多列和不同类型的数据类型组成,例如
df3.printSchema()
CtpJobId: string (nullable = true)
|-- TransformJobStateId: string (nullable = true)
|-- LastError: string (nullable = true)
|-- PriorityDate: string (nullable = true)
|-- QueuedTime: string (nullable = true)
|-- AccurateAsOf: string (nullable = true)
|-- SentToDevice: string (nullable = true)
|-- StartedAtDevice: string (nullable = true)
|-- ProcessStart: string (nullable = true)
|-- LastProgressAt: string (nullable = true)
|-- ProcessEnd: string (nullable = true)
|-- ClipFirstFrameNumber: string (nullable = true)
|-- …Run Code Online (Sandbox Code Playgroud) 我已经在 Ubuntu 16.04 和 Mac 上成功安装了 databricks cli。当我尝试在 Ubuntu 18.04(Azure VM)上安装它时,它看起来运行得很好,然后当我尝试调用 cli 工具时它没有安装。我在 Ubuntu 16.04 和 OSX 上运行良好。关于让这个工作的任何想法?输出复制如下
vstsTestLogin@PensDataScienceVSTS:~$ pip install databricks-cli
Collecting databricks-cli
Using cached
https://files.pythonhosted.org/packages/de/8f/b0b5222c910eafb4dd6cc6de04d7821e6caefb5a9d927bc68c39206e422f/databricks_cli-0.8.2-py2-none-any.whl
Collecting tabulate>=0.7.7 (from databricks-cli)
Collecting configparser>=0.3.5 (from databricks-cli)
Collecting click>=6.7 (from databricks-cli)
Using cached https://files.pythonhosted.org/packages/34/c1/8806f99713ddb993c5366c362b2f908f18269f8d792aff1abfd700775a77/click-6.7-py2.py3-none-any.whl
Collecting six>=1.10.0 (from databricks-cli)
Using cached https://files.pythonhosted.org/packages/67/4b/141a581104b1f6397bfa78ac9d43d8ad29a7ca43ea90a2d863fe3056e86a/six-1.11.0-py2.py3-none-any.whl
Collecting requests>=2.17.3 (from databricks-cli)
Using cached https://files.pythonhosted.org/packages/65/47/7e02164a2a3db50ed6d8a6ab1d6d60b69c4c3fdf57a284257925dfc12bda/requests-2.19.1-py2.py3-none-any.whl
Collecting idna<2.8,>=2.5 (from requests>=2.17.3->databricks-cli)
Using cached https://files.pythonhosted.org/packages/4b/2a/0276479a4b3caeb8a8c1af2f8e4355746a97fab05a372e4a2c6a6b876165/idna-2.7-py2.py3-none-any.whl
Collecting certifi>=2017.4.17 (from requests>=2.17.3->databricks-cli)
Using cached https://files.pythonhosted.org/packages/df/f7/04fee6ac349e915b82171f8e23cee63644d83663b34c539f7a09aed18f9e/certifi-2018.8.24-py2.py3-none-any.whl
Collecting chardet<3.1.0,>=3.0.2 (from requests>=2.17.3->databricks-cli)
Using cached https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl
Collecting urllib3<1.24,>=1.21.1 (from …Run Code Online (Sandbox Code Playgroud) 我正在使用 Azure Data Lake Store 存储带有以下 JSON 的简单 JSON 文件:
{
"email": "Usersemail@domain.com",
"id": "823956724385"
}
Run Code Online (Sandbox Code Playgroud)
json 文件名为myJson1.json. Azure Data Lake Store 已成功挂载到 Azure Databricks。
我能够通过以下方式成功加载 JSON 文件
df = spark.read.option("multiline", "true").json(fi.path)
Run Code Online (Sandbox Code Playgroud)
fi.path是一个FileInfo对象,它是MyJson1.json上面的文件。
当我做
spark.read.option("multiline", "true").json(fi.path)
df.show()`
Run Code Online (Sandbox Code Playgroud)
我得到正确打印出的 JSON 对象(DataFrame)为
+---------------------+------------+
| email| id|
+---------------------+------------+
|Usersemail@domain.com|823956724385|
+---------------------+------------+
Run Code Online (Sandbox Code Playgroud)
我想要做的是,用 加载 JSON 文件json.load(filename),以便能够在 Python 中使用 JSON 对象。
当我做
with open('adl://.../myJson1.json', 'r') as file:
jsonObject0 = json.load(file)
Run Code Online (Sandbox Code Playgroud)
然后我收到以下错误
[错误 2] 没有这样的文件或目录 'adl://.../myJson1.json'
当我尝试时(挂载点是正确的,我可以列出文件,也可以使用 spark.read …
我在一个使用库的项目上工作,这对我来说是很新的,尽管我在其他项目中使用它也没有任何问题。
org.joda.time.DateTime
因此,我与Scala一起工作,并在Databricks上作为项目来运行该项目。
scalaVersion:=“ 2.11.12”
异常来自的代码-根据我到目前为止的调查^^-如下:
var lastEndTime = config.getState("some parameters")
val timespanStart: Long = lastEndTime // last query ending time
var timespanEnd: Long = (System.currentTimeMillis / 1000) - (60*840) // 14 hours ago
val start = new DateTime(timespanStart * 1000)
val end = new DateTime(timespanEnd * 1000)
val date = DateTime.now()
Run Code Online (Sandbox Code Playgroud)
其中,getState()函数返回1483228800作为Long类型值。
编辑:我在建立数据框时使用开始和结束日期进行过滤。我将列(时间跨度类型)与这些值进行比较!
val df2= df
.where(col("column_name").isNotNull)
.where(col("column_name") > start &&
col("column_name") <= end)
Run Code Online (Sandbox Code Playgroud)
我得到的错误:
错误从用户代码中抛出:java.lang.RuntimeException:不支持的文字类型类org.joda.time.DateTime 2017-01-01T00:00:00.000Z
我不确定我是否真正理解这是怎么回事,为什么会出错,所以每种帮助都是值得欢迎的!!提前非常感谢您!!
我正在尝试将 pyspark 数据帧转换为 databricks 中的 pandas 数据帧。我的databricks运行时版本是7.3 LTS(Scala 2.12,Spark 3.0.1)\n所以我编写了以下代码
\ndf_temp=spark_temp.toPandas()\nRun Code Online (Sandbox Code Playgroud)\n但我收到错误消息
\nUserWarning: toPandas attempted Arrow optimization because 'spark.sql.execution.arrow.enabled' is set to true,\nRun Code Online (Sandbox Code Playgroud)\n所以我尝试按照以下方法禁用 pyarrow
\nspark.conf.set(\xe2\x80\x9cspark.sql.execution.arrow.enabled\xe2\x80\x9d, \xe2\x80\x9cfalse\xe2\x80\x9d)\nRun Code Online (Sandbox Code Playgroud)\n但我收到错误消息
\nSyntaxError: invalid character in identifier\nRun Code Online (Sandbox Code Playgroud)\n它指向spark.sql\n你能帮我解决这个问题吗
\n我正在使用 Databricks 笔记本提取 gz 压缩的 csv 文件并加载到数据框对象中。我在执行下面的第 2 部分时遇到了问题。
第 1 部分:将压缩文件加载到数据框中运行良好......
%python
df1 = spark.read.option("header",True).option("delimiter", "|").csv("dbfs:/model/.../file_1.csv.gz")
df2 = spark.read.option("header",True).option("delimiter", "|").csv("dbfs:/model/.../file_2.csv.gz")
Run Code Online (Sandbox Code Playgroud)
第 2 部分:尝试合并数据框...
%python
import pandas as pd
df =pd.concat([df1, df2], ignore_index=True)
df.show(truncate=False)
Run Code Online (Sandbox Code Playgroud)
...返回以下错误:
类型错误:无法连接 '<class 'pyspark.sql.dataframe.DataFrame'>' 类型的对象;仅 Series 和 DataFrame 对象有效
对于尝试修改合并数据框的方式有什么建议吗?我最多将有 20 个文件要合并,其中所有列都相同。