我正在尝试使用特定的索引名称向DataFrame添加新行'e'.
number variable values
a NaN bank true
b 3.0 shop false
c 0.5 market true
d NaN government true
Run Code Online (Sandbox Code Playgroud)
我尝试了以下但是它创建了一个新列而不是一个新行.
new_row = [1.0, 'hotel', 'true']
df = df.append(new_row)
Run Code Online (Sandbox Code Playgroud)
仍然不明白如何插入具有特定索引的行.将不胜感激任何建议.
我最近开始发现 Databricks 并面临需要删除增量表的某个列的情况。当我使用 PostgreSQL 时,它就像
ALTER TABLE main.metrics_table
DROP COLUMN metric_1;
Run Code Online (Sandbox Code Playgroud)
我正在查看有关 DELETE 的Databricks文档,但它仅涵盖DELETE the rows that match a predicate.
我还找到了关于 DROP 数据库、DROP 函数和 DROP 表的文档,但绝对没有关于如何从增量表中删除列的内容。我在这里缺少什么?是否有从增量表中删除列的标准方法?
我在 Databricks delta 中有一个表,它由transaction_date. 我想将分区列更改为view_date. 我尝试删除该表,然后使用PARTITIONED BY (view_date).
然而,我的尝试失败了,因为实际文件驻留在 S3 中,即使我删除了一个 hive 表,分区也保持不变。有没有办法更改现有 Delta 表的分区?或者唯一的解决方案是删除实际数据并使用新指示的分区列重新加载它?
我编写了一个函数,用于将数字四舍五入到点右侧的特定位数。但我仍然不明白如何正确定义与量化一起使用的比例。
在下面的例子中,res1返回res2预期的结果。我发现了不同的示例来定义比例以在浮点之后有 2 个数字。使用“1.00”和“0.01”有什么区别?两者的工作方式似乎相同。
至于res3当我将浮点数传递给 Decimal 构造函数以获取 number_3 时 -ROUND_HALF_UP似乎在那里不起作用。为什么会出现这种情况?我应该如何定义从浮点数创建的小数的比例?
如果我将浮点数作为输入是获得量化工作的唯一方法 - 首先将浮点数转换为字符串?
from decimal import Decimal, ROUND_HALF_UP
def custom_round(dec: Decimal, scale, rounding_mode):
return dec.quantize(Decimal(scale), rounding_mode)
number_1 = Decimal("10.026")
res1 = custom_round(number_1, "1.00", ROUND_HALF_UP)
print(res1) # 10.03
number_2 = Decimal("28.525")
res2 = custom_round(number_2, "0.01", ROUND_HALF_UP)
print(res2) # 28.53
number_3 = Decimal(28.525)
res3 = custom_round(number_3, "0.01", ROUND_HALF_UP)
print(res3) # 28.52
Run Code Online (Sandbox Code Playgroud) 我正在使用Helm 图表将 Spark 部署到 GCE 中的 Kubernetes。我已在value.yamlextraVolumes中配置了和,并且它们在部署过程中已成功创建。extraVolumeMounts
在图表部署期间将文件添加到这些卷的正确方法是什么?
## Array to add extra volumes
extraVolumes:
- name: spark-volume
## Array to add extra mounts (normally used with extraVolumes)
extraVolumeMounts:
- name: spark-volume
mountPath: /tmp/new-data
Run Code Online (Sandbox Code Playgroud) configuration apache-spark google-cloud-platform kubernetes-helm
我编写了一个解析Metrics数据的方法,并且首先遇到了transactionMap类型的问题java.util.Map.我用JavaConverters解决了它.
def parseMetrics(metric: Metric) = {
import scala.collection.JavaConverters._
metric.transactionMap.asScala.values.map {
case false => "N"
case true => "Y"
}.toList
Run Code Online (Sandbox Code Playgroud)
但之后我在模式匹配true和false值时出错: pattern type is incompatible with expected type, found: Boolean, required: java.lang.Boolean
据我所知,Scala没有链接两个隐式转换.有没有办法使用JavaConverters修复它?
在 Redshift 中创建表时遇到以下错误:
Column "main.sales_metrics" has unsupported type "character varying[]".;
Run Code Online (Sandbox Code Playgroud)
在 DataFrame 模式中,它看起来像这样:
|-- sales_metrics: array (nullable = true)
|-- element: string (nullable = true)
Run Code Online (Sandbox Code Playgroud)
我试图像我通常在 PostgreSQL 中所做的那样声明该列:sales_metrics text[]正如我从文档中读到的那样,Amazon Redshift 不支持 PostgreSQL 数据类型。
那么我应该如何正确声明在 RedShift 中创建表时sales_metrics存储的列Array[String]?
postgresql dataframe amazon-redshift apache-spark apache-spark-sql
我有一个由Google Places API返回的地点列表,并决定找到价格最低的地方.
以下是我使用Java 8实现它的方法:
BigDecimal lowestPrice = places.stream()
.collect(Collectors.groupingBy(Place::getPrice, Collectors.counting()))
.entrySet().stream().min(Map.Entry.comparingByValue())
.map(Map.Entry::getKey)
.orElse(BigDecimal.ZERO);
Run Code Online (Sandbox Code Playgroud)
它返回了我的最低价格,但获得Place的名称也很棒(它有一个name属性).
我怎样才能返回name价格最低的地方?
我想更改 Databricks Delta 表的列名。
所以我做了以下事情:
// Read old table data
val old_data_DF = spark.read.format("delta")
.load("dbfs:/mnt/main/sales")
// Created a new DF with a renamed column
val new_data_DF = old_data_DF
.withColumnRenamed("column_a", "metric1")
.select("*")
// Dropped and recereated the Delta files location
dbutils.fs.rm("dbfs:/mnt/main/sales", true)
dbutils.fs.mkdirs("dbfs:/mnt/main/sales")
// Trying to write the new DF to the location
new_data_DF.write
.format("delta")
.partitionBy("sale_date_partition")
.save("dbfs:/mnt/main/sales")
Run Code Online (Sandbox Code Playgroud)
在这里,我在写入 Delta 时的最后一步出现错误:
java.io.FileNotFoundException: dbfs:/mnt/main/sales/sale_date_partition=2019-04-29/part-00000-769.c000.snappy.parquet
A file referenced in the transaction log cannot be found. This occurs when data has been manually deleted from …Run Code Online (Sandbox Code Playgroud) 最初我在一个对象中有一个case类.所以,我可以打电话给extractSales这样从另一个类方法:SaleProcessor.extractSales(salesJson).
object SaleProcessor {
case class Sale(name: String, type: String, description: String) {
def extractSales(salesJson: JValue): Seq[Sale] = {
salesJson.extract[Seq[Sale]]
}}}
Run Code Online (Sandbox Code Playgroud)
然后我读到某个地方,没有必要在一个对象中嵌套一个case类,并决定删除该SaleProcessor对象而只留下case类.但在那之后,我无法像以前那样调用该方法.
据我所知,没有对象我必须实例化案例类.但是不确定如何实现这一点,因为如果从JSON中提取,那么Sale对象就会被创建?
另一个问题是,将案例类嵌套到对象中是什么是最合适的方法,什么被认为是Scala中的最佳实践?
apache-spark ×4
databricks ×3
delta-lake ×3
scala ×3
dataframe ×2
java ×2
python ×2
collections ×1
decimal ×1
java-8 ×1
java-stream ×1
pandas ×1
postgresql ×1
python-3.x ×1
rounding ×1
sql ×1