标签: databricks

Scala和Spark中文本词形还原的最简单方法

我想在文本文件中使用词形还原:

surprise heard thump opened door small seedy man clasping package wrapped.

upgrading system found review spring 2008 issue moody audio backed.

omg left gotta wrap review order asap . understand hand delivered dali lama

speak hands wear earplugs lives . listen maintain link long .

cables cables finally able hear gem long rumored music .
...
Run Code Online (Sandbox Code Playgroud)

和预期产量是:

surprise heard thump open door small seed man clasp package wrap.

upgrade system found review spring 2008 issue mood audio back.

omg …
Run Code Online (Sandbox Code Playgroud)

text scala lemmatization apache-spark databricks

6
推荐指数
1
解决办法
4974
查看次数

将常量值列添加到spark数据帧

我在Databricks中使用Spark 2.1版.我有一个数据框wamp,我想要添加一个名为的列region,该列应该采用常量值NE.但是,NameError: name 'lit' is not defined当我运行以下命令时出现错误:

wamp = wamp.withColumn('region', lit('NE'))
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

apache-spark pyspark databricks

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

使用标头和特定文件名将spark数据帧导出到.csv

我正在尝试将数据从spark数据帧导出到.csv文件:

df.coalesce(1)\
  .write\
  .format("com.databricks.spark.csv")\
  .option("header", "true")\
  .save(output_path)
Run Code Online (Sandbox Code Playgroud)

它正在创建一个文件名"part-r-00001-512872f2-9b51-46c5-b0ee-31d626063571.csv"

我希望文件名为"part-r-00000.csv"或"part-00000.csv"

在AWS S3上创建文件时,我对如何使用os.system命令的限制.

如何在保留文件中的标题的同时设置文件名?

谢谢!

python export-to-csv apache-spark pyspark databricks

6
推荐指数
1
解决办法
7291
查看次数

Apache Spark 读取 UTF-16 CSV 文件

我正在尝试读取以 UTF-16 编码的 CSV 文件。

val test = spark.read
.format("com.databricks.spark.csv")
.option("header", "true")
.option("inferSchema", "true")
.option("delimiter",";")
.option("dateFormat", "yyyy-MM-dd HH:mm:ss.SSS")
.option("encoding", "UTF-16")
.option("charset", "ISO-8859-1")
.load("...")
Run Code Online (Sandbox Code Playgroud)

结果我得到了额外的行:

在此处输入图片说明

Spark 是否可能只能使用 UTF-8 编码?或者还有其他方法可以将 UTF-16 CSV 读入数据帧?

scala apache-spark apache-spark-sql spark-dataframe databricks

6
推荐指数
1
解决办法
4542
查看次数

连接器spark-redshift的替代品

我想知道它有spark-redshift连接器的任何其他替代品.它似乎不再维护,因为此库自动包含在Spark 2.1.0-db2及更高版本的Databricks集群映像中.

amazon-redshift apache-spark databricks

6
推荐指数
1
解决办法
187
查看次数

从 Spark 到雪花的连接

我写这篇文章不是为了问问题,而是分享知识。我正在使用 Spark 连接到雪花。但我无法访问雪花。数据块中的内部 JDBC 驱动程序似乎有问题。

这是我得到的错误。

java.lang.NoClassDefFoundError:net/snowflake/client/jdbc/internal/snowflake/common/core/S3FileEncryptionMaterial
Run Code Online (Sandbox Code Playgroud)

我尝试了许多版本的雪花 jdbc 驱动程序和雪花驱动程序。好像我可以匹配到正确的。

apache-spark apache-spark-sql snowflake-cloud-data-platform databricks

6
推荐指数
3
解决办法
2745
查看次数

在expr()中使用lit()

该行:

df.withColumn("test", expr("concat(lon, lat)")) 
Run Code Online (Sandbox Code Playgroud)

可以正常工作,但是

df.withColumn("test", expr("concat(lon, lit(','), lat)"))
Run Code Online (Sandbox Code Playgroud)

产生以下异常:

org.apache.spark.sql.AnalysisException:未定义的函数:'lit'。该功能既不是注册的临时功能,也不是在数据库“默认”中注册的永久功能。org.apache.spark.sql.catalyst.analysis.Analyzer $ LookupFunctions $$ anonfun $ apply $ 15 $ anonfun $ applyOrElse $ 49.apply(Analyzer.scala:1198)的第1行pos 12

为什么?解决方法是什么?

scala apache-spark apache-spark-sql databricks

6
推荐指数
1
解决办法
3531
查看次数

Spark 2.4.0-无法将ISO8601字符串解析为保留ms的TimestampType

当尝试使用cast(TimestampType)将具有时区信息的ISO8601字符串转换为TimestampType时,仅接受时区格式为+01:00的字符串。如果以ISO8601合法方式+0100(不含冒号)定义了时区,则解析将失败并返回null。我需要在保留ms部分的同时将字符串转换为TimestampType。

2019-02-05T14:06:31.556+0100    Returns null
2019-02-05T14:06:31.556+01:00   Returns a correctly parsed TimestampType
Run Code Online (Sandbox Code Playgroud)

我试图使用to_timestamp()和unix_timestamp()。cast(TimestampType)函数。不幸的是,它们截断了我需要保留的时间戳的ms部分。另外,您需要将它们应用于新列,并且不能就地替换复杂类型中的属性(如果我在from_json函数的模式中将ApiReceived属性设为TimestampType,则可以这样做)。

df
.select($"body".cast(StringType))
.select(from_json($"body", schema).as("Payload"))
.select($"Payload.Metadata.ApiReceived".as("Time"))
.withColumn("NewTime", to_timestamp($"Time", "yyyy-MM-dd'T'HH:mm:ss.SSSZ"))
.withColumn("NewTime2", unix_timestamp($"Time", "yyyy-MM-dd'T'HH:mm:ss.SSSZ").cast(TimestampType))
.withColumn("NewTime3", $"Time".cast(TimestampType))
Run Code Online (Sandbox Code Playgroud)

上面的DataFrame的输出类型

df:org.apache.spark.sql.DataFrame
  Time:string
  NewTime:timestamp
  NewTime2:timestamp
  NewTime3:timestamp
Run Code Online (Sandbox Code Playgroud)

并输出值

Time        2019-02-05T14:06:31.556+0100
NewTime     2019-02-05 13:06:31
NewTime2    2019-02-05 13:06:31
NewTime3    null
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以使Spark在不依靠UDF:s的情况下处理转换?

更新资料

经过更彻底的调查后,我发现Sparks日期时间解析有些不一致。:)

val df = Seq(
  //Extended format
  ("2019-02-05T14:06:31.556+01:00"),
  ("2019-02-05T14:06:31.556+01"),
  ("2019-02-05T14:06:31.556"),
  //Basic Format
  ("20190205T140631556+0100"),
  ("20190205T140631556+01"),
  ("20190205T140631556"),
  //Mixed extended with basic
  ("2019-02-05T14:06:31.556+0100"),
  ("20190205T140631556+01:00")
).toDF

val formatStrings = Seq(
  ("yyyy-MM-dd'T'HH:mm:ss.SSSZ"),
  ("yyyy-MM-dd'T'HH:mm:ss.SSSX"),
  ("yyyyMMdd'T'HHmmssSSSZ"),
  ("yyyyMMdd'T'HHmmssSSSX")
)

val format = formatStrings(0)

val df2 …
Run Code Online (Sandbox Code Playgroud)

apache-spark databricks azure-databricks

6
推荐指数
0
解决办法
526
查看次数

在数据块上运行 spark 时出错:构造函数 public XXX 未列入白名单

我正在使用 azure databricks 并尝试从此页面运行一些示例 python 代码:https ://spark.apache.org/docs/latest/ml-pipeline.html

并得到这个异常: py4j.security.Py4JSecurityException: Constructor public org.apache.spark.ml.classification.LogisticRegression(java.lang.String) 未列入白名单。

谢谢。立东

apache-spark pyspark databricks

6
推荐指数
1
解决办法
3818
查看次数

使用Databricks Connect时如何在Scala中正确访问dbutils

我正在使用Databricks Connect从IntelliJ IDEA(Scala)在本地Azure Databricks群集中运行代码。

一切正常。我可以在IDE中本地连接,调试和检查。

我创建了一个Databricks作业来运行我的自定义应用程序JAR,但由于以下异常而失败:

19/08/17 19:20:26 ERROR Uncaught throwable from user code: java.lang.NoClassDefFoundError: com/databricks/service/DBUtils$
at Main$.<init>(Main.scala:30)
at Main$.<clinit>(Main.scala)
Run Code Online (Sandbox Code Playgroud)

我的Main.scala类的第30行是

val dbutils: DBUtils.type = com.databricks.service.DBUtils
Run Code Online (Sandbox Code Playgroud)

就像本文档页面上的描述一样

该页面显示了一种访问在本地和群集中均可使用的DBUtil的方法。但是该示例仅显示了Python,而我正在使用Scala。

以既可以使用databricks-connect在本地工作又可以在运行JAR的Databricks作业中工作的方式访问它的正确方法是什么?

更新

似乎有两种使用DBUtils的方法。

1)这里描述的DbUtils类。引用文档,此库允许您构建和编译项目,但不能运行它。这不允许您在集群上运行本地代码。

2)此处描述 Databricks Connect 。这使您可以在Databricks集群中运行本地Spark代码。

问题在于这两种方法具有不同的设置和程序包名称。似乎没有一种在本地使用Databricks Connect的方法(在群集中不可用),但是随后通过sbt / maven添加了使用DbUtils类的jar应用程序,以便群集可以访问它。

scala databricks azure-databricks databricks-connect dbutils

6
推荐指数
2
解决办法
125
查看次数